[29990] in Perl-Users-Digest
Perl-Users Digest, Issue: 1233 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Fri Jan 25 14:09:46 2008
Date: Fri, 25 Jan 2008 11:09:06 -0800 (PST)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Fri, 25 Jan 2008 Volume: 11 Number: 1233
Today's topics:
Re: Get an arbitrary hash key, quickly. <simon.chao@fmr.com>
Re: Get an arbitrary hash key, quickly. xhoster@gmail.com
Re: Get an arbitrary hash key, quickly. xhoster@gmail.com
Re: Get an arbitrary hash key, quickly. <simon.chao@fmr.com>
Re: Get an arbitrary hash key, quickly. <ced@blv-sam-01.ca.boeing.com>
Re: Get an arbitrary hash key, quickly. <ced@blv-sam-01.ca.boeing.com>
Re: Newbie Perl Question (Bryce)
Re: not defined v. eq undef <someone@example.com>
Re: not defined v. eq undef <brian.d.foy@gmail.com>
Re: not defined v. eq undef <ben@morrow.me.uk>
Re: not defined v. eq undef <john1949@yahoo.com>
Re: not defined v. eq undef <jurgenex@hotmail.com>
Re: not defined v. eq undef <uri@stemsystems.com>
Re: Problem relaying uploads paktsardines@gmail.com
Re: Quotes around words <stoupa@practisoft.cz>
Re: Quotes around words <abigail@abigail.be>
Re: Relying on $_ <tzz@lifelogs.com>
XML::Twig segfault on solaris (again) <braindumped@expires-31-01-2008.news-group.org>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Fri, 25 Jan 2008 06:37:10 -0800 (PST)
From: nolo contendere <simon.chao@fmr.com>
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <8217d8d2-404c-458b-892d-f2a227cf4148@k39g2000hsf.googlegroups.com>
On Jan 24, 7:05=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Presumably you could fix this with
=2E..
> Presumably also things might get found twice, depending on how the
=2E..
>
> Presumably switching to something like BerkeleyDB::BTREE would also fix
=2E..
> presumably an implementation could be made that used U/u magic directly
> rather than tie magic, and so avoided the method calls.
>
You're very presumptuous ;-).
------------------------------
Date: 25 Jan 2008 17:16:38 GMT
From: xhoster@gmail.com
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <20080125121640.253$GS@newsreader.com>
"A. Sinan Unur" <1usa@llenroc.ude.invalid> wrote:
> xhoster@gmail.com wrote in news:20080124122509.078$og@newsreader.com:
>
> > I need a work queue, but I don't really care about the order (LIFO,
> > FIFO, random) in which things come out of it. Either is pretty simple
> > and efficient with a Perl array, and either would suffice. But I want
> > the queue to not hold duplicate entries. I could use an array as a
> > stack or queue, with a parallel hash to be checked to prevent
> > duplicates from being entered. But why keep parallel data structures?
> > Just use the hash as the queue:
> >
> > while (key %hash) {
> > my $to_do=each %hash;
> > delete $hash{$to_do};
> > ## do stuff with $to_do, which might make new entries in %hash
> > };
> >
> > Well, except that this gets really slow on large hashes.
>
> It is possible I am misunderstanding what you are doing, but I would
> have written:
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> my %queue;
> $queue{ $_ } = undef for 1 .. 1_000_000;
>
> while ( my @keys = keys %queue ) {
> for my $task ( @keys ) {
> delete $queue{ $task };
> #
> # Do something
> #
> # Add another task with a small probability
> #
> if ( 0.1 > rand ) {
> $queue{ 1 + int(rand 1_000_000) } = undef;
> }
> }
> }
Now we've changed from an extra parallel structure to an extra caching
structure, which of course works but has the same inelegance. (Grepping
back through years of code, I see that I've actually used this method many
years ago, too, but from the comments it looks like I didn't understand why
the original was slow, so I regarded it as trial and error magic.) It does
require that "do something" can only add and not delete things from %queue,
which is fine with my original specification but lacks maximal flexibility.
There are many ways to work around this degradation in performance, but it
seems like all of them impose other limitations or inelegances. Oh well.
if these things were too easy I guess anyone could do it and I'd be out of
a job :)
Xho
--
-------------------- http://NewsReader.Com/ --------------------
The costs of publication of this article were defrayed in part by the
payment of page charges. This article must therefore be hereby marked
advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate
this fact.
------------------------------
Date: 25 Jan 2008 17:32:23 GMT
From: xhoster@gmail.com
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <20080125123224.981$N8@newsreader.com>
Ben Morrow <ben@morrow.me.uk> wrote:
> Quoth xhoster@gmail.com:
> > I need a work queue, but I don't really care about the order (LIFO,
> > FIFO, random) in which things come out of it. Either is pretty simple
> > and efficient with a Perl array, and either would suffice. But I want
> > the queue to not hold duplicate entries. I could use an array as a
> > stack or queue, with a parallel hash to be checked to prevent
> > duplicates from being entered. But why keep parallel data structures?
> > Just use the hash as the queue:
> >
> > while (key %hash) {
> > my $to_do=each %hash;
> > delete $hash{$to_do};
> > ## do stuff with $to_do, which might make new entries in %hash
> > };
> >
> > Well, except that this gets really slow on large hashes.
>
> I would have thought the obvious method would be
>
> my (@queue, %done);
>
> while (my $to_do = shift @queue) {
> exists $done{$to_do} and next;
> $done{$to_do} = 1;
>
> process_stuff($to_do);
> }
The problem here is that, under some uses, @queue can accumulate an fatal
number of replicates. While %done prevents them from being processed
more than once, they are still stored more than once. If each of 10_000
work-items build up on the queue 10_000 times each, that becomes a storage
problem. So you need to use %done to guard against adding replicates into
@queue to defend memory usage.
But replicates can still build up to unacceptable levels before the first
instance of one ever gets $done{}. So then you need another hash,
%queued_but_not_done, to reject duplicate entries at the earliest stage.
And then you say "This is a mess, let's just use one hash", then you
discover that "each" performs poorly on a shrinking hash, and then you post
a message here. :)
Xho
--
-------------------- http://NewsReader.Com/ --------------------
The costs of publication of this article were defrayed in part by the
payment of page charges. This article must therefore be hereby marked
advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate
this fact.
------------------------------
Date: Fri, 25 Jan 2008 10:02:45 -0800 (PST)
From: nolo contendere <simon.chao@fmr.com>
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <83f86a12-498e-4d35-9283-e75e15e19f05@c23g2000hsa.googlegroups.com>
On Jan 25, 12:32=A0pm, xhos...@gmail.com wrote:
=2E..
>
> But replicates can still build up to unacceptable levels before the first
> instance of one ever gets $done{}. =A0So then you need another hash,
> %queued_but_not_done, to reject duplicate entries at the earliest stage.
=46rom this I infer that you are engaging in parallel processing. Is
this correct?
> And then you say "This is a mess, let's just use one hash", then you
> discover that "each" performs poorly on a shrinking hash, and then you pos=
t
> a message here. :)
------------------------------
Date: Fri, 25 Jan 2008 10:39:01 -0800 (PST)
From: "comp.llang.perl.moderated" <ced@blv-sam-01.ca.boeing.com>
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <a55f18c4-66f7-4419-9776-a13a428c1b5e@n22g2000prh.googlegroups.com>
On Jan 24, 9:25 am, xhos...@gmail.com wrote:
> I need a work queue, but I don't really care about the order (LIFO, FIFO,
> random) in which things come out of it. Either is pretty simple and
> efficient with a Perl array, and either would suffice. But I want the
> queue to not hold duplicate entries. I could use an array as a stack or
> queue, with a parallel hash to be checked to prevent duplicates from being
> entered. But why keep parallel data structures? Just use the hash as the
> queue:
>
> while (key %hash) {
> my $to_do=each %hash;
> delete $hash{$to_do};
> ## do stuff with $to_do, which might make new entries in %hash
>
> };
>
> Well, except that this gets really slow on large hashes.
>
> I suspect the each operator does a linear scan of all the buckets until it
> finds an occupied one. With a hash that used to be big but now isn't (and
> so has lots of empty buckets), this behaves poorly, essentially being N^2
> to empty a large hash.
>
> If I just use scalar %hash instead of scalar keys %hash, then the slow down
> doesn't occur because "each" scans the buckets from where it left off last
> time, instead of from the beginning each time. (At first I thought it was
> scalar keys %hash that was being slow and was going to post about *that*,
> but then I realized that keys' reseting of the iterator was causing "each"
> to be slow). But you shouldn't change a hash at the same time you iterate
> over it because things might get missed. Presumably, anything missed will
> be found on the next time through the iterator, so this might work without
> the slowdown:
>
> while (%hash) { # does not reset iterator
> my $to_do=each %hash;
> next unless defined $to_do; # not a real hash key,
> # signals end of iterator
> ## do stuff with $to_do, which might make new entries in %hash
>
> };
>
> If my speculation on the internals is right, then this would still
> perform poorly if the hash first grows very large, then shrinks to
> be only a few elements, but those last few elements keep triggering
> the addition of just one more element each time. In my case, that
> shouldn't be a problem.
>
> Any comments on this code? Is there some less quirky way to do this
> efficiently? Is there a simple (as simple as perl's internals can get)
> way to fix "each" so that it doesn't have this degenerate case?
>
Even with tie slowness, a Tie::IxHash solution would at least be more
straightforward since insertion order is maintained... I think.
tie my %hash, 'Tie::IxHash';
my $idx = 0;
while ( my @queue = keys %hash ) {
my $to_do = $queue[$idx++];
delete $hash{ $to_do };
# do stuff with $to_do, which might make
# new entries in %hash
}
--
Charles DeRykus
------------------------------
Date: Fri, 25 Jan 2008 10:57:15 -0800 (PST)
From: "comp.llang.perl.moderated" <ced@blv-sam-01.ca.boeing.com>
Subject: Re: Get an arbitrary hash key, quickly.
Message-Id: <72e7d1ec-7460-4eb7-90ac-ee014f80b226@v4g2000hsf.googlegroups.com>
On Jan 25, 10:39 am, "comp.llang.perl.moderated" <c...@blv-
sam-01.ca.boeing.com> wrote:
> On Jan 24, 9:25 am, xhos...@gmail.com wrote:
>
>
> ...
>
> Even with tie slowness, a Tie::IxHash solution would at least be more
> straightforward since insertion order is maintained... I think.
>
> tie my %hash, 'Tie::IxHash';
> my $idx = 0;
>
> while ( my @queue = keys %hash ) {
> my $to_do = $queue[$idx++];
> delete $hash{ $to_do };
> # do stuff with $to_do, which might make
> # new entries in %hash
>
> }
Well, it seemed like a good idea a minute ago.
But, you might need to tweak $idx for instance...
Maybe other problems too...
while ( my @queue = keys %hash ) {
$idx = $#queue if $idx > $#queue;
my $to_do = $queue[$idx++];
delete $hash{ $to_do };
# do stuff with $to_do, which might make
# new entries in %hash
}
--
Charles DeRykus
------------------------------
Date: Fri, 25 Jan 2008 12:26:51 GMT
From: zerospam@example.com (Bryce)
Subject: Re: Newbie Perl Question
Message-Id: <fAkmj.7804$A75.2109@trnddc05>
On Wed, 23 Jan 2008 10:53:07 +0000, RedGrittyBrick wrote:
> Shame on you.
> [...]
> Shame on me :-)
>
> It's untested - if your free sandwich contains bugs, you're on your own.
You're a saint, Mr. RGB! Works perfectly. A thousand blessings on your
compilers. :-)
And thanks also to the others who responded:
Gunnar - "use CGI::Carp 'fatalsToBrowser';" proved infinitely useful while
making one customization I decided upon to RGB's script. Thanks!
Ted - Yes, I'd definitely #exclude it post-testing. :-)
Joe - So noted. I always look for how to enable runtime error output for
problem-finding purposes. Unfortunately in this case, no shell access was
available to me. That's part of why I wound up in c.l.p.m begging help:
couldn't even diagnose *why* my own attempts at the script were failing.
Thanks also for the note on the matching. I love optimizations like that.
------------------------------
Date: Fri, 25 Jan 2008 11:12:57 GMT
From: "John W. Krahn" <someone@example.com>
Subject: Re: not defined v. eq undef
Message-Id: <Zujmj.14414$vp3.4245@edtnps90>
John wrote:
>
> Are these the same?
>
> if ($x eq undef) {print "hi"}
> if (not defined $x) {print "hi}
No. ($x eq undef) has no valid meaning in perl.
> Note: I have tried posting to perl beginners (the obvious choice for a
> simple question) but the posts do not appear.
Have you subscribed?
http://lists.cpan.org/showlist.cgi?name=beginners
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
------------------------------
Date: Fri, 25 Jan 2008 05:34:55 -0600
From: brian d foy <brian.d.foy@gmail.com>
Subject: Re: not defined v. eq undef
Message-Id: <250120080534556664%brian.d.foy@gmail.com>
In article <6tOdnd0H26w1NATanZ2dnUVZ8rOdnZ2d@eclipse.net.uk>, John
<john1949@yahoo.com> wrote:
> Hi
>
> Are these the same?
>
> if ($x eq undef) {print "hi"}
> if (not defined $x) {print "hi}
>
> If so, which is preferred?
The trick is to show what you intend to do. Since there is a builtin to
check if something is defined, use the builtin. :)
------------------------------
Date: Fri, 25 Jan 2008 11:46:05 +0000
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: not defined v. eq undef
Message-Id: <touo65-t51.ln1@osiris.mauzo.dyndns.org>
Quoth "A. Sinan Unur" <1usa@llenroc.ude.invalid>:
> "John" <john1949@yahoo.com> wrote in
> news:6tOdnd0H26w1NATanZ2dnUVZ8rOdnZ2d@eclipse.net.uk:
>
> > if ($x eq undef) {print "hi"}
> > if (not defined $x) {print "hi}
>
> Testing equality with undef will generate a warning regardless of the
> value of $x.
More importantly, it doesn't test that $x is undef. ($x eq undef) is
equivalent to ($x eq ''), modulo warnings.
Ben
------------------------------
Date: Fri, 25 Jan 2008 11:55:10 -0000
From: "John" <john1949@yahoo.com>
Subject: Re: not defined v. eq undef
Message-Id: <JJidnbtK09GAUwTanZ2dnUVZ8qugnZ2d@eclipse.net.uk>
"brian d foy" <brian.d.foy@gmail.com> wrote in message
news:250120080534556664%brian.d.foy@gmail.com...
> In article <6tOdnd0H26w1NATanZ2dnUVZ8rOdnZ2d@eclipse.net.uk>, John
> <john1949@yahoo.com> wrote:
>
>> Hi
>>
>> Are these the same?
>>
>> if ($x eq undef) {print "hi"}
>> if (not defined $x) {print "hi}
>>
>> If so, which is preferred?
>
> The trick is to show what you intend to do. Since there is a builtin to
> check if something is defined, use the builtin. :)
Hi
OK since "eq undef" will generate warnings then "not defined" appears the
better choice.
And it's builtin.
Thanks
John
------------------------------
Date: Fri, 25 Jan 2008 14:26:05 GMT
From: Jürgen Exner <jurgenex@hotmail.com>
Subject: Re: not defined v. eq undef
Message-Id: <kvrjp3tg3s47cn1neraq70tltl1lpf267r@4ax.com>
"John" <john1949@yahoo.com> wrote:
>Are these the same?
>
>if ($x eq undef) {print "hi"}
>if (not defined $x) {print "hi}
Try
my $x=''; #empty string
if ($x eq undef) {print "equal"}
and you will notice that the textual value of undef as used for the string
cmparison is the empty string. In other words: you are comparing $x with
the empty string, not with undef.
jue
------------------------------
Date: Fri, 25 Jan 2008 15:08:40 GMT
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: not defined v. eq undef
Message-Id: <x71w86rlhj.fsf@mail.sysarch.com>
>>>>> "J" == John <john1949@yahoo.com> writes:
J> OK since "eq undef" will generate warnings then "not defined" appears the
J> better choice.
J> And it's builtin.
wrong. eq undef is a bad choice since it doesn't work. try it sometime
and see if you can tell if a var is undef or 0 or ''. it fails.
the rest of the reasons are gravy.
uri
--
Uri Guttman ------ uri@stemsystems.com -------- http://www.sysarch.com --
----- Perl Architecture, Development, Training, Support, Code Review ------
----------- Search or Offer Perl Jobs ----- http://jobs.perl.org ---------
--------- Gourmet Hot Cocoa Mix ---- http://bestfriendscocoa.com ---------
------------------------------
Date: Fri, 25 Jan 2008 07:16:25 -0800 (PST)
From: paktsardines@gmail.com
Subject: Re: Problem relaying uploads
Message-Id: <b44c4931-6cb8-47ee-a31c-09460eb7fc06@n22g2000prh.googlegroups.com>
Apologies for:
1. not replying sooner
2. the numerous typos in my sample code, which was typed directly into
the post, rather of running perl across it first.
But, for those who were wondering (and you have my sympathies), the
problem was in the call to curl.. Changing '-d' to '-H' for cur's
form parameters got things working.
It's all so bloody obvious in hindsight.
Thanks for your help,
pakt.
------------------------------
Date: Fri, 25 Jan 2008 14:17:50 +0100
From: "Petr Vileta" <stoupa@practisoft.cz>
Subject: Re: Quotes around words
Message-Id: <fncohc$22sr$1@ns.felk.cvut.cz>
Abigail wrote:
> _
> Pat (none@none.none) wrote on VCCLX September MCMXCIII in
> <URL:news:Xns9A30132861D3Bnone@140.99.99.130>:
> }} my $str = ' "these" "have" "quotes" these do not. ';
> }} $str =~
> s/([^"a-zA-Z0-9_])([a-zA-Z0-9_]+)([^"a-zA-Z0-9_])/$1"$2"$3/gs; }}
> }} And the result is this:
> }} "these" "have" "quotes" "these" do "not".
> }}
> }} The only problem is that "do" is skipped. Is this expected? So
> how do I }} get around this?
>
>
> $str =~ s {[^"\w]* # Non-word, non-quote sequence
> (?:
> "[^"]*" # Quoted
> [^"\w]* # Non-word, non-quote sequence
> )* # Repeat
> \K # Cut
> (\w+) # Capture an unquoted word.
> }
> {"$1"}xg; # Replace.
>
>
> Abigail
Please how to do the same in Perl 5.6.1?
I tested script bellow and I got warning "Unrecognized escape \K passed
through at L:\temp\test.pl line 4."
use strict;
use warnings;
my $str = ' "these" "have" "quotes" these do not. ';
$str =~ s {[^"\w]*(?:"[^"]*"[^"\w]*)*\K(\w+)}{"$1"}xg;
print $str;
--
Petr Vileta, Czech republic
(My server rejects all messages from Yahoo and Hotmail. Send me your
mail from another non-spammer site please.)
Please reply to <petr AT practisoft DOT cz>
------------------------------
Date: 25 Jan 2008 14:04:58 GMT
From: Abigail <abigail@abigail.be>
Subject: Re: Quotes around words
Message-Id: <slrnfpjr4a.pb5.abigail@alexandra.abigail.be>
_
Petr Vileta (stoupa@practisoft.cz) wrote on VCCLX September MCMXCIII in
<URL:news:fncohc$22sr$1@ns.felk.cvut.cz>:
,, Abigail wrote:
,, > _
,, > Pat (none@none.none) wrote on VCCLX September MCMXCIII in
,, > <URL:news:Xns9A30132861D3Bnone@140.99.99.130>:
,, > }} my $str = ' "these" "have" "quotes" these do not. ';
,, > }} $str =~
,, > s/([^"a-zA-Z0-9_])([a-zA-Z0-9_]+)([^"a-zA-Z0-9_])/$1"$2"$3/gs; }}
,, > }} And the result is this:
,, > }} "these" "have" "quotes" "these" do "not".
,, > }}
,, > }} The only problem is that "do" is skipped. Is this expected? So
,, > how do I }} get around this?
,, >
,, >
,, > $str =~ s {[^"\w]* # Non-word, non-quote sequence
,, > (?:
,, > "[^"]*" # Quoted
,, > [^"\w]* # Non-word, non-quote sequence
,, > )* # Repeat
,, > \K # Cut
,, > (\w+) # Capture an unquoted word.
,, > }
,, > {"$1"}xg; # Replace.
,, >
,, >
,, > Abigail
,,
,, Please how to do the same in Perl 5.6.1?
Capture the part before \K, and use it in the replacement. And remove the \K.
,, I tested script bellow and I got warning "Unrecognized escape \K passed
,, through at L:\temp\test.pl line 4."
\K is available in 5.10.
Abigail
--
perl -Mstrict='}); print "Just another Perl Hacker"; ({' -le1
------------------------------
Date: Fri, 25 Jan 2008 12:22:27 -0600
From: Ted Zlatanov <tzz@lifelogs.com>
Subject: Re: Relying on $_
Message-Id: <86d4rp7okc.fsf@lifelogs.com>
On Thu, 24 Jan 2008 12:15:57 -0500 Bernie Cosell <bernie@fantasyfarm.com> wrote:
BC> As a matter of style and expectation, I'm wondering about relying on $_.
BC> Often, just for convenience I'll do a no-var foreach. For example:
BC> foreach (sort keys %SOMEHASH)
BC> { print "Processing $_\n" ;
BC> my $target = $SOMEHASH{$_} ;
BC> ....
BC> }
BC> and I'll refer to $_ here and there in the loop [e.g., if something fails
BC> I'll typically just do a 'die "Error processing $_: $!\n" ;' or the like].
BC> Is that bad form? I just sorted out a minor problem where I was calling an
BC> object method and I was surprised to discover that $_ was clobbered when I
BC> got back from the method.
BC> Is this a bug [even if a minor one] in the package? If not, what are the
BC> rules for when you should and shouldn't expect $_ to get messed up?
I'd say if there's more than two lines of code in the loop code, don't
use $_. It is very handy for map/grep/postfix-foreach loops but can
make life hell otherwise.
Ted
------------------------------
Date: Fri, 25 Jan 2008 16:38:46 +0100
From: Thomas Peter <braindumped@expires-31-01-2008.news-group.org>
Subject: XML::Twig segfault on solaris (again)
Message-Id: <1201275526.96@user.newsoffice.de>
Hi,
I described the Problem here yet
(http://coding.derkeiler.com/Archive/Perl/comp.lang.perl.misc/2007-07/threads.html#00742)
and just found out that the scripts stop dumping core, when i store the
twig-object in a global variable.
Does that put another light on
http://rt.cpan.org/Ticket/Display.html?id=28365
and the other bug mentioned by mirod in
http://coding.derkeiler.com/Archive/Perl/comp.lang.perl.misc/2007-07/msg00860.html
thnx
thomas
------------------------------
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:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#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 1233
***************************************