[31782] in Perl-Users-Digest
Perl-Users Digest, Issue: 3045 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Mon Jul 26 14:09:23 2010
Date: Mon, 26 Jul 2010 11:09:06 -0700 (PDT)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Mon, 26 Jul 2010 Volume: 11 Number: 3045
Today's topics:
chmod problem when creating a file in web script <john1949@yahoo.com>
Re: chmod problem when creating a file in web script <ben@morrow.me.uk>
Re: Help with regular expression <nospam-abuse@ilyaz.org>
Re: Help with regular expression <whynot@pozharski.name>
Re: Help with regular expression <ben@morrow.me.uk>
Re: Help with regular expression sln@netherlands.com
Re: Need help/advice to improve script <sopan.shewale@gmail.com>
Re: Speed of reading some MB of data using qx(...) <w.c.humann@arcor.de>
Re: Speed of reading some MB of data using qx(...) <ben@morrow.me.uk>
Re: Speed of reading some MB of data using qx(...) <w.c.humann@arcor.de>
Re: Speed of reading some MB of data using qx(...) <hjp-usenet2@hjp.at>
Re: Speed of reading some MB of data using qx(...) <ben@morrow.me.uk>
Re: Speed of reading some MB of data using qx(...) <hjp-usenet2@hjp.at>
Re: Speed of reading some MB of data using qx(...) <w.c.humann@arcor.de>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Mon, 26 Jul 2010 06:49:28 +0100
From: "John" <john1949@yahoo.com>
Subject: chmod problem when creating a file in web script
Message-Id: <i2j7la$quj$1@news.albasani.net>
Hi
This is a web based Perl script.
I need to allow the user to create a small file under
/home/example.com/industry/ - already chmod 0755.
I have tried chmod in the Perl script to change the permission to write -
then back to read
my $filename='/home/example.com/industry/london.txt';
chmod (0777,$filename); # allow writing
open (DAT,">$filename");
print DAT "$whatever";
chmod (0755,$filename); # safely back to read only
but I get permission denied.
I don't want 0777 anywhere because of security issues. How do I get around
the final 7 in 0777?
Regards
John
------------------------------
Date: Mon, 26 Jul 2010 10:22:02 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: chmod problem when creating a file in web script
Message-Id: <qm00i7-sj6.ln1@osiris.mauzo.dyndns.org>
Quoth "John" <john1949@yahoo.com>:
>
> This is a web based Perl script.
>
> I need to allow the user to create a small file under
> /home/example.com/industry/ - already chmod 0755.
>
> I have tried chmod in the Perl script to change the permission to write -
> then back to read
>
> my $filename='/home/example.com/industry/london.txt';
> chmod (0777,$filename); # allow writing
Does this file really need to be executable?
> open (DAT,">$filename");
> print DAT "$whatever";
> chmod (0755,$filename); # safely back to read only
>
> but I get permission denied.
From where? None of the lines above do any error checking, so is this
not your real code? Have you seen the Posting Guidelines?
Assuming the error is from the chmod, you can't chmod a file unless you
own it (for obvious reasons). I don't quite know what you're trying to
achieve here, but I suspect you're going about it the wrong way
entirely.
> I don't want 0777 anywhere because of security issues. How do I get around
> the final 7 in 0777?
What 'security issues' do you think are prevented by this? Apart from
anything else, had the code above worked you would have had a window
where the file *was* 0777, completely removing any potential security
benefit from chmoding it back to 0755 afterwards.
Oh, and (as usual):
Check the return values of your system calls.
Use three-arg open.
Keep your filehandles in variables.
Explicitly close any file opened for writing and check for errors.
Don't uselessly quote variables.
open (my $DAT, ">", $filename)
or die "can't open '$filename': $!";
print $DAT $whatever;
close $DAT
or die "can't write to '$filename': $!";
You could also use the 'autodie' CPAN module (core as of perl 5.10) to
do all the 'or die's for you.
Ben
------------------------------
Date: Mon, 26 Jul 2010 06:51:32 +0000 (UTC)
From: Ilya Zakharevich <nospam-abuse@ilyaz.org>
Subject: Re: Help with regular expression
Message-Id: <slrni4qc3k.r06.nospam-abuse@powdermilk.math.berkeley.edu>
On 2010-07-25, Ben Morrow <ben@morrow.me.uk> wrote:
> Is there something wrong with /\(\([^(]*\)\)/ ?
>
> (Hmm, that's *seriously* unreadable.)
Today, I ruined one of my most beautiful RExes:
qr{([<>])}
for parsing POD. To treat mismatched < and >, one actually needs to
through in \z as well.
What is the moral? I do not know! m{\(\([^(]*\)\)} is not better,
right? Fontification by CPerl helps a little bit, of course, but not
much.
Lisp has the notion of "escaping out of quoting"; so it would look
something like
m{ (( (?` [^(]* ) )) }xq
assuming //q means /\Q/, except that the part inside (?` ) is not
quoted...
Yours,
Ilya
------------------------------
Date: Mon, 26 Jul 2010 10:19:31 +0300
From: Eric Pozharski <whynot@pozharski.name>
Subject: Re: Help with regular expression
Message-Id: <slrni4qdo2.a75.whynot@orphan.zombinet>
with <i2i2o4$14uv$1@adenine.netfront.net> Mark Hobley wrote:
> I need a regular expression with the following properties.
> I need to match text (typically, though not necessarily expressions)
> enclosed within double parentheses. However, I do not want to match nested
> single parentheses enclosed text.
>
> So ((*)) is a match, but ((*)*(*)) is not a match.
> Here are some examples to illustrate this.
>
> ((FOO)) - This is a match
> (()) - This is a match
> ((3 + 2)) - This is a match
> ((3 + 2) + (2 * foo)) - This is not a match
> ((3 * bar) + ((foo))) - This is a match
> ((3 * bar) + ((foo))bar) - This is a match.
>
> I hope that lot makes sense.
I dare to speculate that won't make sense tomorrow. Achieve grammar.
Then make parser.
--
Torvalds' goal for Linux is very simple: World Domination
Stallman's goal for GNU is even simpler: Freedom
------------------------------
Date: Mon, 26 Jul 2010 10:33:38 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Help with regular expression
Message-Id: <ic10i7-sj6.ln1@osiris.mauzo.dyndns.org>
Quoth Ilya Zakharevich <nospam-abuse@ilyaz.org>:
> On 2010-07-25, Ben Morrow <ben@morrow.me.uk> wrote:
> > Is there something wrong with /\(\([^(]*\)\)/ ?
> >
> > (Hmm, that's *seriously* unreadable.)
>
> Today, I ruined one of my most beautiful RExes:
>
> qr{([<>])}
>
> for parsing POD. To treat mismatched < and >, one actually needs to
> through in \z as well.
>
> What is the moral? I do not know! m{\(\([^(]*\)\)} is not better,
> right? Fontification by CPerl helps a little bit, of course, but not
> much.
Yes (well, Vim rather than CPerl, of course... :) ).
/\Q((\E [^(]* \Q))\E/x is a little better, but not much. I think if
this was any longer I'd go the whole way with
my ($op, $cl) = qw/(( ))/;
my $rx = qr/$op [^(]* $cl/x;
but it's not worth it in this case.
> Lisp has the notion of "escaping out of quoting"; so it would look
> something like
>
> m{ (( (?` [^(]* ) )) }xq
>
> assuming //q means /\Q/, except that the part inside (?` ) is not
> quoted...
I like the idea, but not the syntax. It's a little too much like SGML
CDATA for me: 'everything is literal *except* this special magic
sequence you've forgotten about...'. I think if I seriously wanted an
improvement on \Q\E it would look like
/\q{((} [^(]* \q{))}/x
with the character following \q being a delimiter (matched or not)
following the same rules as for m// &c.
Ben
------------------------------
Date: Mon, 26 Jul 2010 07:29:30 -0700
From: sln@netherlands.com
Subject: Re: Help with regular expression
Message-Id: <dn6r46lsj9du7b2n2bgrvssn5hi0cpk8eb@4ax.com>
On 25 Jul 2010 22:36:44 GMT, jt@toerring.de (Jens Thoms Toerring) wrote:
>Mark Hobley <markhobley@yahoo.donottypethisbit.co> wrote:
>> I need a regular expression with the following properties.
>> I need to match text (typically, though not necessarily expressions)
>> enclosed within double parentheses. However, I do not want to match nested
>> single parentheses enclosed text.
>
>> So ((*)) is a match, but ((*)*(*)) is not a match.
>> Here are some examples to illustrate this.
>
>> ((FOO)) - This is a match
>> (()) - This is a match
>> ((3 + 2)) - This is a match
>> ((3 + 2) + (2 * foo)) - This is not a match
>> ((3 * bar) + ((foo))) - This is a match
>
>Should the whole thing be the match or only the "((foo))" part?
>
>> ((3 * bar) + ((foo))bar) - This is a match.
>
>Same question here
>
>> I hope that lot makes sense.
>
>If in e.g. "((3 * bar) + ((foo)))" only the "((foo))" part is
>meant to be the match then I would think
>
>\(\([^(]*\)\)
^^
This will match ((foo)), ((foo))) or ((foo))))))))))))))))))))))
Maybe [^()]*
-sln
------------------------------
Date: Mon, 26 Jul 2010 00:54:34 -0700 (PDT)
From: "sopan.shewale@gmail.com" <sopan.shewale@gmail.com>
Subject: Re: Need help/advice to improve script
Message-Id: <10259048-fd65-4a73-add7-ed125f83d0e3@t5g2000prd.googlegroups.com>
On Jul 23, 8:33=A0pm, "Peter J. Holzer" <hjp-usen...@hjp.at> wrote:
> On 2010-07-22 18:22, s...@netherlands.com <s...@netherlands.com> wrote:
>
> > =A0 =A0 $line =3D~ /^
> > =A0 =A0 =A0 =A0 ([^:]*)
> > =A0 =A0 =A0 : =A0(?<pass> =A0 [^:]*)
> > =A0 =A0 =A0 : =A0(?<emails> [^:]*)
> > =A0 =A0 =A0 :? (?<flag> =A0 [^:]*)
> > =A0 =A0 =A0 :? (?<pass_change> [^:]*)
> > =A0 =A0 =A0 :? (?<flag_change> .*)
> > =A0 =A0 $/x
> > =A0 =A0 and $data->{$1} =3D {%+};
>
> That's nice. I guess one of these days I should try to get rid of 5.8.x
> so that I can finally start to use 5.10 features ...
>
> =A0 =A0 =A0 =A0 hp
[sopan] - this is interesting feature and not sure if it will work on
old versions of Perl.
------------------------------
Date: Mon, 26 Jul 2010 00:24:07 -0700 (PDT)
From: Wolfram Humann <w.c.humann@arcor.de>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <434fed7f-69e6-472d-a431-b58090052245@r27g2000yqb.googlegroups.com>
On Jul 26, 12:10=A0am, Ben Morrow <b...@morrow.me.uk> wrote:
>
> Win32's pipes are *really* slow. Write it to a temporary and then read
> the file normally in perl.
After further experiments I am now convinced that pipes are not the
bottleneck (even on win32 piping 10MB can't take 20 seconds...). The
problem seems to be Straberry's memory management for long strings. I
need to do some more benchmarking and will report this issue
separately.
Does anybody know of the appropriate place to report Strawberry Perl
specific bugs?
Wolfram
------------------------------
Date: Mon, 26 Jul 2010 10:39:23 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <bn10i7-sj6.ln1@osiris.mauzo.dyndns.org>
Quoth Wolfram Humann <w.c.humann@arcor.de>:
> On Jul 26, 12:10 am, Ben Morrow <b...@morrow.me.uk> wrote:
> >
> > Win32's pipes are *really* slow. Write it to a temporary and then read
> > the file normally in perl.
>
> After further experiments I am now convinced that pipes are not the
> bottleneck (even on win32 piping 10MB can't take 20 seconds...). The
> problem seems to be Straberry's memory management for long strings. I
> need to do some more benchmarking and will report this issue
> separately.
>
> Does anybody know of the appropriate place to report Strawberry Perl
> specific bugs?
I seriously doubt the issue is with Strawberry specifically; almost
certainly any issue applies Win32 perl in general and should be reported
to p5p with perlbug. If you can confirm it is specific to Strawberry
(so, e.g., a self-compiled mingw perl *doesn't* have the problem) then I
think the correct place is the Perl::Dist::Strawberry queue on
rt.cpan.org (mail bug-Perl-Dist-Strawberry@rt.cpan.org).
(IIRC malloc on Win32 is *also* known to be deadly slow, and also IIRC
it's impossible to use perl's malloc without breaking things...)
Ben
------------------------------
Date: Mon, 26 Jul 2010 03:07:09 -0700 (PDT)
From: Wolfram Humann <w.c.humann@arcor.de>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <bb79e3a4-1c6f-40a9-8cb9-0e8ce27a4288@g19g2000yqc.googlegroups.com>
On Jul 26, 11:39=A0am, Ben Morrow <b...@morrow.me.uk> wrote:
>
> I seriously doubt the issue is with Strawberry specifically; almost
> certainly any issue applies Win32 perl in general and should be reported
> to p5p with perlbug. If you can confirm it is specific to Strawberry
> (so, e.g., a self-compiled mingw perl *doesn't* have the problem) then I
> think the correct place is the Perl::Dist::Strawberry queue on
> rt.cpan.org (mail bug-Perl-Dist-Strawbe...@rt.cpan.org).
>
> (IIRC malloc on Win32 is *also* known to be deadly slow, and also IIRC
> it's impossible to use perl's malloc without breaking things...)
>
> Ben
Thanks for the pointers. My comparison is Strawberry Perl (5.10 and
5.12) against Cygwin Perl on the same machine. The latter (as well as
Perl on Linux) doesn't have the issues I see. Is that a sufficient
"proof" for the issues being Strawberry specific?
Wolfram
------------------------------
Date: Mon, 26 Jul 2010 13:24:52 +0200
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <slrni4qs44.e60.hjp-usenet2@hrunkner.hjp.at>
On 2010-07-26 10:07, Wolfram Humann <w.c.humann@arcor.de> wrote:
> On Jul 26, 11:39 am, Ben Morrow <b...@morrow.me.uk> wrote:
>> I seriously doubt the issue is with Strawberry specifically; almost
>> certainly any issue applies Win32 perl in general and should be reported
>> to p5p with perlbug. If you can confirm it is specific to Strawberry
>> (so, e.g., a self-compiled mingw perl *doesn't* have the problem) then I
>> think the correct place is the Perl::Dist::Strawberry queue on
>> rt.cpan.org (mail bug-Perl-Dist-Strawbe...@rt.cpan.org).
>>
>> (IIRC malloc on Win32 is *also* known to be deadly slow, and also IIRC
>> it's impossible to use perl's malloc without breaking things...)
>
> Thanks for the pointers. My comparison is Strawberry Perl (5.10 and
> 5.12) against Cygwin Perl on the same machine. The latter (as well as
> Perl on Linux) doesn't have the issues I see. Is that a sufficient
> "proof" for the issues being Strawberry specific?
I remember vaguely that Activestate Perl has similar issues. I think Ben
is correct that this is a problem with Win32 malloc and will affect any
Perl build which uses the Win32 malloc implementation (Cygwin probably
provides its own malloc implementation). A fix which works on both
Activestate and Strawberry would certainly be preferrable to a
Strawberry-specific one.
hp
------------------------------
Date: Mon, 26 Jul 2010 14:11:43 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <f5e0i7-rhh1.ln1@osiris.mauzo.dyndns.org>
Quoth Wolfram Humann <w.c.humann@arcor.de>:
> On Jul 26, 11:39 am, Ben Morrow <b...@morrow.me.uk> wrote:
> >
> > I seriously doubt the issue is with Strawberry specifically; almost
> > certainly any issue applies Win32 perl in general and should be reported
> > to p5p with perlbug. If you can confirm it is specific to Strawberry
> > (so, e.g., a self-compiled mingw perl *doesn't* have the problem) then I
> > think the correct place is the Perl::Dist::Strawberry queue on
> > rt.cpan.org (mail bug-Perl-Dist-Strawbe...@rt.cpan.org).
> >
> > (IIRC malloc on Win32 is *also* known to be deadly slow, and also IIRC
> > it's impossible to use perl's malloc without breaking things...)
>
> Thanks for the pointers. My comparison is Strawberry Perl (5.10 and
> 5.12) against Cygwin Perl on the same machine. The latter (as well as
> Perl on Linux) doesn't have the issues I see. Is that a sufficient
> "proof" for the issues being Strawberry specific?
No. As far as Perl is concerned, Cygwin is a separate OS. A fair
comparison would be with ActiveState or (as I said) with a Win32 perl
you've compiled yourself.
If the issue simply turns out to be 'Microsoft don't know how to write a
decent malloc', there is very little p5p can do about it, of course. On
most platforms perl can, and often does, use its own malloc
implementation which is optimised for perl's use (lots of tiny
allocations and deallocations all the time). This isn't possible on
Win32 unless you make a custom build of perl that doesn't support the
fork emulation.
Ben
------------------------------
Date: Mon, 26 Jul 2010 17:12:19 +0200
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <slrni4r9ej.frn.hjp-usenet2@hrunkner.hjp.at>
On 2010-07-26 13:11, Ben Morrow <ben@morrow.me.uk> wrote:
> If the issue simply turns out to be 'Microsoft don't know how to write a
> decent malloc', there is very little p5p can do about it, of course. On
> most platforms perl can, and often does, use its own malloc
> implementation which is optimised for perl's use (lots of tiny
> allocations and deallocations all the time). This isn't possible on
> Win32 unless you make a custom build of perl that doesn't support the
> fork emulation.
Since the fork emulation works with Win32 malloc, I think it should be
possible to write a custom malloc based on Win32 malloc (or the
underlying API calls) which still works with the fork emulation but is
faster. But it's probably not easy or somebody would have done it
already (I don't pretend to understand either memory allocation or the
fork emulation on windows).
hp
------------------------------
Date: Mon, 26 Jul 2010 09:48:52 -0700 (PDT)
From: Wolfram Humann <w.c.humann@arcor.de>
Subject: Re: Speed of reading some MB of data using qx(...)
Message-Id: <458fced3-8d03-45e8-b35f-507849b3893b@t2g2000yqe.googlegroups.com>
On Jul 26, 3:11=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth Wolfram Humann <w.c.hum...@arcor.de>:
> > Thanks for the pointers. My comparison is Strawberry Perl (5.10 and
> > 5.12) against Cygwin Perl on the same machine. The latter (as well as
> > Perl on Linux) doesn't have the issues I see. Is that a sufficient
> > "proof" for the issues being Strawberry specific?
>
> No. As far as Perl is concerned, Cygwin is a separate OS. A fair
> comparison would be with ActiveState or (as I said) with a Win32 perl
> you've compiled yourself.
Oh dear, you're right: ActiveState Perl is just as bad as Strawberry.
Here's my test-case:
(I always append a number of chunks with a total size of 1E6 chars to
an existing string,
but the start-size of the existing string and the chunk-size vary)
use strict;
use warnings;
use Time::HiRes qw(time);
my $c1E1 =3D '#' x 1E1;
my $c1E2 =3D '#' x 1E2;
my $c1E3 =3D '#' x 1E3;
my $c1E4 =3D '#' x 1E4;
my $c1E5 =3D '#' x 1E5;
my $str1 =3D '#' x 1E5;
my $str2 =3D '#' x 1E6;
my $str3 =3D '#' x 1E7;
my $str4 =3D '#' x 1E7;
my $str5 =3D '#' x 1E7;
my $str6 =3D '#' x 1E7;
my $str7 =3D '#' x 1E7;
my $str8 =3D '#' x 1E7;
my $str9 =3D '#' x 2E7;
$str9 =3D '#' x 1E7;
my @ar1 =3D map{ $c1E2 } 1..1E5;
my @c =3D (
'1E5 chars + 1E4 x 1E2 chars' =3D> sub{ $str1 .=3D $c1E2 for 1..1E4 },
'1E6 chars + 1E4 x 1E2 chars' =3D> sub{ $str2 .=3D $c1E2 for 1..1E4 },
'1E7 chars + 1E4 x 1E2 chars' =3D> sub{ $str3 .=3D $c1E2 for 1..1E4 },
'',
'1E7 chars + 1E5 x 1E1 chars' =3D> sub{ $str4 .=3D $c1E1 for 1..1E5 },
'1E7 chars + 1E4 x 1E2 chars' =3D> sub{ $str5 .=3D $c1E2 for 1..1E4 },
'1E7 chars + 1E3 x 1E3 chars' =3D> sub{ $str6 .=3D $c1E3 for 1..1E3 },
'1E7 chars + 1E2 x 1E4 chars' =3D> sub{ $str7 .=3D $c1E4 for 1..1E2 },
'1E7 chars + 1E1 x 1E5 chars' =3D> sub{ $str8 .=3D $c1E5 for 1..1E1 },
'',
'1E7 chars (pre-extend to 2E7) + 1E4 x 1E2 chars' =3D> sub{ $str9 .=3D
$c1E2 for 1..1E4 },
'1E7 (1E5 x 1E2 chars) array + 1E4 x 1E2 chars ' =3D> sub{ push @ar1,
$c1E2 for 1..1E4 },
);
while (@c) {
my $name =3D shift @c;
print("\n"), next unless $name;
my $code =3D shift @c;
my $t1 =3D time; &$code; my $t2 =3D time;
printf "%s: %6.1f ms\n", $name, 1000 * ($t2 - $t1);
}
##########################################################
And these are the results:
c:\cygwin\bin\perl LongStrings.pl
1E5 chars + 1E4 x 1E2 chars: 1.6 ms
1E6 chars + 1E4 x 1E2 chars: 2.4 ms
1E7 chars + 1E4 x 1E2 chars: 1.5 ms
1E7 chars + 1E5 x 1E1 chars: 11.3 ms
1E7 chars + 1E4 x 1E2 chars: 1.5 ms
1E7 chars + 1E3 x 1E3 chars: 0.9 ms
1E7 chars + 1E2 x 1E4 chars: 1.0 ms
1E7 chars + 1E1 x 1E5 chars: 0.9 ms
1E7 chars (pre-extend to 2E7) + 1E4 x 1E2 chars: 1.2 ms
1E7 (1E5 x 1E2 chars) array + 1E4 x 1E2 chars : 5.5 ms
##########################################################
c:\strawberry\perl\bin\perl LongStrings.pl
1E5 chars + 1E4 x 1E2 chars: 94.4 ms
1E6 chars + 1E4 x 1E2 chars: 319.9 ms
1E7 chars + 1E4 x 1E2 chars: 2710.4 ms
1E7 chars + 1E5 x 1E1 chars: 2656.0 ms
1E7 chars + 1E4 x 1E2 chars: 2656.1 ms
1E7 chars + 1E3 x 1E3 chars: 2609.1 ms
1E7 chars + 1E2 x 1E4 chars: 1109.1 ms
1E7 chars + 1E1 x 1E5 chars: 118.3 ms
1E7 chars (pre-extend to 2E7) + 1E4 x 1E2 chars: 1.2 ms
1E7 (1E5 x 1E2 chars) array + 1E4 x 1E2 chars : 6.5 ms
I compared Strawberry and ActiveState on another machine: the times
are close to each other but even longer than the ones above due to the
older hardware.
Wolfram
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
Back issues are available via anonymous ftp from
ftp://cil-www.oce.orst.edu/pub/perl/old-digests.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 3045
***************************************