[28768] in Perl-Users-Digest
Perl-Users Digest, Issue: 12 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Jan 10 18:10:17 2007
Date: Wed, 10 Jan 2007 15:10:08 -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 Wed, 10 Jan 2007 Volume: 11 Number: 12
Today's topics:
Re: What's happening with the last child process here?? xhoster@gmail.com
Re: What's happening with the last child process here?? <uri@stemsystems.com>
Re: What's happening with the last child process here?? <Remus.SEPP@t-mobile.co.uk>
Re: What's happening with the last child process here?? <uri@stemsystems.com>
Re: What's happening with the last child process here?? <Remus.SEPP@t-mobile.co.uk>
Re: What's happening with the last child process here?? <uri@stemsystems.com>
Re: Working with array references <frederik_vanderstraeten@yahoo.co.uk>
Re: Working with array references <mritty@gmail.com>
Re: Working with array references <frederik_vanderstraeten@yahoo.co.uk>
Re: Working with array references <quetzalcotl@consultant.com>
Re: Working with array references <john@castleamber.com>
Re: Working with array references xhoster@gmail.com
Re: Working with array references <mritty@gmail.com>
Re: Working with array references <frederik_vanderstraeten@yahoo.co.uk>
Re: Working with array references <john@castleamber.com>
Re: Working with array references <frederik_vanderstraeten@yahoo.co.uk>
Re: Working with array references <jgibson@mail.arc.nasa.gov>
Re: Working with array references <frederik_vanderstraeten@yahoo.co.uk>
Re: Working with array references <yankeeinexile@gmail.com>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: 10 Jan 2007 17:52:41 GMT
From: xhoster@gmail.com
Subject: Re: What's happening with the last child process here????
Message-Id: <20070110125438.065$cu@newsreader.com>
"trxrse" <Remus.SEPP@t-mobile.co.uk> wrote:
> Hi, everyone
>
> can you tell me please what's happening here?
>
> This piece of code is supposed to launch 3 children processes and to
> keep track of each one when they finish.
> THE PROBLEM: SOMETIMES (50% OF THE TIME) THE LAST PROCESS NEVER RETURNS
> THE USR1 MESSAGE TO THE PARENT.
USR1 isn't a message.
> $SIG{USR1} = "doneit";
Do you need to reinstall signals after they've been fired on your system?
> foreach $item (@waitlist) {
> pipe *{$item},FH;
> unless ($pid = fork()) {
> # Child process
> sleep $item;
> print FH "Completed $item\n";
> kill "USR1",$parent;
> print "I am finished... Process ",$item,"\n";
> exit();
> }
Why mix signals and select? When the child is done writing on it's
handle, then it is done. No need for signals at all.
Xho
--
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service $9.95/Month 30GB
------------------------------
Date: Wed, 10 Jan 2007 13:49:14 -0500
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: What's happening with the last child process here????
Message-Id: <x7lkka4t05.fsf@mail.sysarch.com>
>>>>> "t" == trxrse <Remus.SEPP@t-mobile.co.uk> writes:
t> can you tell me please what's happening here?
not really. it is one of the most convoluted and bizarre forking
examples i have seen. why are you doing it the hard way?
t> THE PROBLEM: SOMETIMES (50% OF THE TIME) THE LAST PROCESS NEVER RETURNS
t> THE USR1 MESSAGE TO THE PARENT.
signals can be merged into one actual call to your signal handler. this
is an OS dependent thing and perl can't fix it. when you get a signal,
you have to make sure it was only one or possible more than one that
were merged. the way to do this with subprocesses is to call
wait/waitpid in nonblcoking mode and loop until no more processes are
reaped. use the sigchild signal which is better as it will be delivered
after the child exits unlike yours which could be delivered before it
really exited.
t> @waitlist = (3,2,1);
as anno said, this is a very bad way to track the processes. save the
pids and use those to track what is alive and dead.
t> $SIG{USR1} = "doneit";
you can use a code ref there since your callback is so small.
$SIG{USR1} = sub { $doneit = 1 } ;
but as i said use sigchild.
and use strict and warnings also as anno said.
t> # Use a "typeglob" to store, in effect, a list of
t> # file handles.
that is not a good way to do this. use lexical file handles and make one
for each call to pipe. use Symbol::gensym or IPC::Open2 but not
typeglobs which are symbolic refs.
t> foreach $item (@waitlist) {
t> pipe *{$item},FH;
the FH will be the overwritten in the parent for all the children which
is not smart. one issue with pipes to children is detecting closed
pipes with select as you seem to be doing below. you have to close the
other side in the parent or child since those will be dupped and stay
open.
t> unless ($pid = fork()) {
t> # Child process
t> sleep $item;
reusing the item number for sleep time is very nutso. i can't say
anything more as i am just shocked by that code.
t> print FH "Completed $item\n";
t> kill "USR1",$parent;
that signal could be delivered before this process exits so you won't be
able to immediately detect it. but my guess is that the signals were
merged and you don't use wait/waitpid to really check for childred to
reap. actually you aren't even reaping the children (only wait/waitpid
does that) so you create zombie children which will get reaped by the
init process when your parent exits. as i said, this is all done totally
the wrong way.
t> $mid = localtime();
t> print "Forked by $mid\n";
forking will happen much faster than the granulaity of localtime (which
is normally 1 second).
t> # Parent - wait for returned data
t> # To add - uses select to check channels!
t> while ($kids >0) {
t> while (! $gotone) {
t> sleep 1;
t> }
t> $gotone = 0;
t> foreach $item (@waitlist) {
t> $rin = $win = "";
t> vec($rin, fileno(*{$item}), 1) = 1;
t> $ein = $rin ;
t> $nfound=select($rin,$win,$ein,0);
coding select directly is not for the faint of heart. use IO::Select or
event.pm. event.pm can also handle signals which makes it very good for
process management.
enough for now. my brane hertz.
uri
--
Uri Guttman ------ uri@stemsystems.com -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
------------------------------
Date: 10 Jan 2007 11:11:16 -0800
From: "trxrse" <Remus.SEPP@t-mobile.co.uk>
Subject: Re: What's happening with the last child process here????
Message-Id: <1168456276.362837.29900@o58g2000hsb.googlegroups.com>
Thanks very much for your replies. I appologize, I am not a
professional perl developer... even if I'd like to... :( - probably I
need some years for this. Anyway, I appreciate your answers.
To be honest, I am trying to write a very simple "scheduler" that gets
an amount of work as input (eg process a file having 1 million lines),
splits this work in chunks and launches a limited number of parallel
processes, each one doing some small chunk of work. When a child
process is finished OK, the "scheduler" has to launch another child
that does the next chunk. Finally, I want to embed some elegant
behavior in the master/parent - aka re-launch the chunk of work for the
subprocess that collapsed, etc...
Can you give me a hint, please? Of course, I am not asking you people
to solve my problem, but I would like to find your professional views.
Thanks again
R
PS I will rewrite the code as Anno said earlier.
------------------------------
Date: Wed, 10 Jan 2007 14:56:19 -0500
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: What's happening with the last child process here????
Message-Id: <x7wt3u3bbw.fsf@mail.sysarch.com>
>>>>> "t" == trxrse <Remus.SEPP@t-mobile.co.uk> writes:
t> To be honest, I am trying to write a very simple "scheduler" that
t> gets an amount of work as input (eg process a file having 1 million
t> lines), splits this work in chunks and launches a limited number of
t> parallel processes, each one doing some small chunk of work. When a
t> child process is finished OK, the "scheduler" has to launch another
t> child that does the next chunk. Finally, I want to embed some
t> elegant behavior in the master/parent - aka re-launch the chunk of
t> work for the subprocess that collapsed, etc...
this is not a trivial project. your best bet is to hire someone to do it
for you or use some framework to do much of the heavy lifting. but since
you are not that experienced, even a framework will be tricky to learn
and use.
t> Can you give me a hint, please? Of course, I am not asking you people
t> to solve my problem, but I would like to find your professional views.
there are too many issues in such a project to just learn from hints. if
you are up for learning a framework, you can check out stem (which i
created) on cpan which does subprocess management and IPC for you. but
as i said, even though it will do much of the work, you will need to
learn a different paradigm and also better coding skills. my suggestion
again would be to hire someone (possibly me :) to either do this or help
you develop it.
uri
--
Uri Guttman ------ uri@stemsystems.com -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
------------------------------
Date: 10 Jan 2007 14:07:04 -0800
From: "trxrse" <Remus.SEPP@t-mobile.co.uk>
Subject: Re: What's happening with the last child process here????
Message-Id: <1168466824.221568.131830@i56g2000hsf.googlegroups.com>
I find amazing that there is no open source project on this. I will try
to do it myself - I have no other chance.
Thanks
Remus
Uri Guttman wrote:
> >>>>> "t" == trxrse <Remus.SEPP@t-mobile.co.uk> writes:
>
> t> To be honest, I am trying to write a very simple "scheduler" that
> t> gets an amount of work as input (eg process a file having 1 million
> t> lines), splits this work in chunks and launches a limited number of
> t> parallel processes, each one doing some small chunk of work. When a
> t> child process is finished OK, the "scheduler" has to launch another
> t> child that does the next chunk. Finally, I want to embed some
> t> elegant behavior in the master/parent - aka re-launch the chunk of
> t> work for the subprocess that collapsed, etc...
>
> this is not a trivial project. your best bet is to hire someone to do it
> for you or use some framework to do much of the heavy lifting. but since
> you are not that experienced, even a framework will be tricky to learn
> and use.
>
> t> Can you give me a hint, please? Of course, I am not asking you people
> t> to solve my problem, but I would like to find your professional views.
>
> there are too many issues in such a project to just learn from hints. if
> you are up for learning a framework, you can check out stem (which i
> created) on cpan which does subprocess management and IPC for you. but
> as i said, even though it will do much of the work, you will need to
> learn a different paradigm and also better coding skills. my suggestion
> again would be to hire someone (possibly me :) to either do this or help
> you develop it.
>
> uri
>
> --
> Uri Guttman ------ uri@stemsystems.com -------- http://www.stemsystems.com
> --Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
> Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
------------------------------
Date: Wed, 10 Jan 2007 17:14:35 -0500
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: What's happening with the last child process here????
Message-Id: <x7veje1qd0.fsf@mail.sysarch.com>
>>>>> "t" == trxrse <Remus.SEPP@t-mobile.co.uk> writes:
t> I find amazing that there is no open source project on this. I will try
t> to do it myself - I have no other chance.
don't top post! read the list guidelines.
what do you mean project? you haven't specified this at all. and stem
(which is open source on cpan) can do most of the work as i said. you
still need to code at a higher level than what you have shown to do this
in any 'open source project' you could find. they don't do your real
work for you and you have to use their apis and such. also as i said
they all involve learning curves so you are stuck with that no matter
what you do. process farms are not difficult but they are not beginner
projects.
why do developers paint themselves into corners like this? someone is
paying for this in either time and/or money and they should know the
work and skill level required. it is not my fault that i have to tell
you the bad news that you will need help with this.
uri
--
Uri Guttman ------ uri@stemsystems.com -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
------------------------------
Date: Wed, 10 Jan 2007 15:31:52 GMT
From: Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk>
Subject: Re: Working with array references
Message-Id: <IF7ph.283417$Fg3.5866597@phobos.telenet-ops.be>
Paul Lalli schreef:
> Frederik Vanderstraeten wrote:
>> Hi
>>
>> I'm new to Perl. I have a question about array references: what's the
>> best way to use them? How do I add an element, remove an element, ... Is
>> dereferencing the best way?
>> E.g., what is the easiest way to rewrite this:
>>
>> $arrayRef = $obj->get('myArray');
>> @array = $@arrayRef;
>> @array = (@array, 'newElement');
>> $obj->set('myArray', \@array);
>>
>> As get returns a reference, I assume I could easily do all of this in
>> one statement.
>
> Not only is that a syntax error, that's also the worst possible way to
> access an array by its reference. You're making three separate copies
> of the array, for no reason of any kind.
Sorry, I didn't test that code. I wasn't going to use something as ugly
as that anyway.
I know it's a bad way, that's why I'm asking for a better one. :)
> If you have $arrayRef, you get the array that $arrayRef references by
> surrounding it in @{...}. From there, you can use that array like you
> would any other array:
>
> $arrayRef = $obj->get('myArray');
> push @{$arrayRef}, 'newElement';
> $obj->set('myArray', $arrayRef);
Thanks.
So if the object actually returns a reference to that array, and not a
reference to a copy, I wouldn't even need the set function, right?
push @{$obj->get('myArray')}, 'newElement';
Please correct me if this is as silly as my first code.
> You need to read a decent tutorial on references:
> perldoc perlreftut
Thanks again, I read perlref but didn't understand most of it.
This tutorial is much easier to follow.
------------------------------
Date: 10 Jan 2007 07:44:41 -0800
From: "Paul Lalli" <mritty@gmail.com>
Subject: Re: Working with array references
Message-Id: <1168443881.849872.262510@i56g2000hsf.googlegroups.com>
Frederik Vanderstraeten wrote:
> Paul Lalli schreef:
> > Frederik Vanderstraeten wrote:
> >> $arrayRef = $obj->get('myArray');
> >> @array = $@arrayRef;
> >> @array = (@array, 'newElement');
> >> $obj->set('myArray', \@array);
> > Not only is that a syntax error, that's also the worst possible way to
> > access an array by its reference. You're making three separate copies
> > of the array, for no reason of any kind.
>
> Sorry, I didn't test that code.
Please don't do that. You waste everyone's time by making us guess as
to what your real code is that you're actually asking about. Please
read the Posting Guidelines that are posted here twice a week.
> > If you have $arrayRef, you get the array that $arrayRef references by
> > surrounding it in @{...}. From there, you can use that array like you
> > would any other array:
> >
> > $arrayRef = $obj->get('myArray');
> > push @{$arrayRef}, 'newElement';
> > $obj->set('myArray', $arrayRef);
> So if the object actually returns a reference to that array, and not a
> reference to a copy, I wouldn't even need the set function, right?
>
> push @{$obj->get('myArray')}, 'newElement';
That's correct.
Paul Lalli
------------------------------
Date: Wed, 10 Jan 2007 15:59:00 GMT
From: Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk>
Subject: Re: Working with array references
Message-Id: <838ph.283450$gc7.5900345@phobos.telenet-ops.be>
Paul Lalli schreef:
> Frederik Vanderstraeten wrote:
>> Sorry, I didn't test that code.
>
> Please don't do that. You waste everyone's time by making us guess as
> to what your real code is that you're actually asking about. Please
> read the Posting Guidelines that are posted here twice a week.
Sorry, and thanks for the help.
------------------------------
Date: 10 Jan 2007 08:31:44 -0800
From: "Ingo Menger" <quetzalcotl@consultant.com>
Subject: Re: Working with array references
Message-Id: <1168446704.378535.41130@k58g2000hse.googlegroups.com>
Frederik Vanderstraeten schrieb:
>
> Thanks.
> So if the object actually returns a reference to that array, and not a
> reference to a copy, I wouldn't even need the set function, right?
>
> push @{$obj->get('myArray')}, 'newElement';
>
> Please correct me if this is as silly as my first code.
This is okay syntactically, but might not be a good idea.
The reason is that you don't know (or at least, are not supposed to
know) what goes on inside $obj. The get-method may, for instance,
somehow compute it's return value and in that case your push will be
performed and then the whole array will be garbage collected.
------------------------------
Date: 10 Jan 2007 17:58:31 GMT
From: John Bokma <john@castleamber.com>
Subject: Re: Working with array references
Message-Id: <Xns98B479D0EA583castleamber@130.133.1.4>
"Paul Lalli" <mritty@gmail.com> wrote:
> Frederik Vanderstraeten wrote:
>> So if the object actually returns a reference to that array, and not a
>> reference to a copy, I wouldn't even need the set function, right?
>>
>> push @{$obj->get('myArray')}, 'newElement';
>
> That's correct.
Unless for some reason get returns a reference to a copy of the internal
array. This is something that *should* be documented IMO though.
--
John Experienced Perl programmer: http://castleamber.com/
Perl help, tutorials, and examples: http://johnbokma.com/perl/
------------------------------
Date: 10 Jan 2007 17:57:30 GMT
From: xhoster@gmail.com
Subject: Re: Working with array references
Message-Id: <20070110125927.456$XP@newsreader.com>
Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk> wrote:
> Hi
>
> I'm new to Perl. I have a question about array references: what's the
> best way to use them? How do I add an element, remove an element, ... Is
> dereferencing the best way?
> E.g., what is the easiest way to rewrite this:
>
> $arrayRef = $obj->get('myArray');
> @array = $@arrayRef;
> @array = (@array, 'newElement');
> $obj->set('myArray', \@array);
>
> As get returns a reference, I assume I could easily do all of this in
> one statement.
I think the right way is for $obj to provide a "push" method for you to
use. Otherwise, what is the point of using encapsulation?
Xho
--
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service $9.95/Month 30GB
------------------------------
Date: 10 Jan 2007 10:04:37 -0800
From: "Paul Lalli" <mritty@gmail.com>
Subject: Re: Working with array references
Message-Id: <1168452276.936903.5730@i56g2000hsf.googlegroups.com>
John Bokma wrote:
> > Frederik Vanderstraeten wrote:
>
> >> [...] if the object actually returns a reference to that array, and not a
> >> reference to a copy [....]
> Unless for some reason get returns a reference to a copy of the internal
> array.
echo...echo....echo....
Paul Lalli
------------------------------
Date: Wed, 10 Jan 2007 18:33:50 GMT
From: Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk>
Subject: Re: Working with array references
Message-Id: <ikaph.283674$R76.5734517@phobos.telenet-ops.be>
xhoster@gmail.com schreef:
> Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk> wrote:
>> Hi
>>
>> I'm new to Perl. I have a question about array references: what's the
>> best way to use them? How do I add an element, remove an element, ... Is
>> dereferencing the best way?
>> E.g., what is the easiest way to rewrite this:
>>
>> $arrayRef = $obj->get('myArray');
>> @array = $@arrayRef;
>> @array = (@array, 'newElement');
>> $obj->set('myArray', \@array);
>>
>> As get returns a reference, I assume I could easily do all of this in
>> one statement.
>
> I think the right way is for $obj to provide a "push" method for you to
> use. Otherwise, what is the point of using encapsulation?
>
> Xho
>
It's a session object. (CGI::Session. This in fact uses param() for both
get and set but this is only example code and it's easier to understand
with get and set IMHO.) It is not specifically designed to store arrays.
------------------------------
Date: 10 Jan 2007 19:12:07 GMT
From: John Bokma <john@castleamber.com>
Subject: Re: Working with array references
Message-Id: <Xns98B4864AC314Ccastleamber@130.133.1.4>
"Paul Lalli" <mritty@gmail.com> wrote:
> John Bokma wrote:
>
>> > Frederik Vanderstraeten wrote:
>>
>> >> [...] if the object actually returns a reference to that array,
>> >> and not a reference to a copy [....]
>
>> Unless for some reason get returns a reference to a copy of the
>> internal array.
>
> echo...echo....echo....
So much for pretending to be awake :-D.
--
John Experienced Perl programmer: http://castleamber.com/
Perl help, tutorials, and examples: http://johnbokma.com/perl/
------------------------------
Date: Wed, 10 Jan 2007 20:36:38 GMT
From: Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk>
Subject: Re: Working with array references
Message-Id: <q7cph.283821$%w3.5877883@phobos.telenet-ops.be>
One more question: What's the best way to make an array reference of an
existing array? perlreftut uses [@array], is it better than \@array?
------------------------------
Date: Wed, 10 Jan 2007 12:50:05 -0800
From: Jim Gibson <jgibson@mail.arc.nasa.gov>
Subject: Re: Working with array references
Message-Id: <100120071250051194%jgibson@mail.arc.nasa.gov>
In article <q7cph.283821$%w3.5877883@phobos.telenet-ops.be>, Frederik
Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk> wrote:
> One more question: What's the best way to make an array reference of an
> existing array? perlreftut uses [@array], is it better than \@array?
[@array] creates a copy of the array as an anonymous array and returns
a reference to that anonymous array.
\@array returns a reference to the existing array
"Best" depends upon what you want to do with the reference and whether
or not you want to work with the original array or a copy.
Posted Via Usenet.com Premium Usenet Newsgroup Services
----------------------------------------------------------
** SPEED ** RETENTION ** COMPLETION ** ANONYMITY **
----------------------------------------------------------
http://www.usenet.com
------------------------------
Date: Wed, 10 Jan 2007 21:01:20 GMT
From: Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk>
Subject: Re: Working with array references
Message-Id: <Aucph.283849$qX5.5723164@phobos.telenet-ops.be>
Jim Gibson schreef:
> In article <q7cph.283821$%w3.5877883@phobos.telenet-ops.be>, Frederik
> Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk> wrote:
>
>> One more question: What's the best way to make an array reference of an
>> existing array? perlreftut uses [@array], is it better than \@array?
>
> [@array] creates a copy of the array as an anonymous array and returns
> a reference to that anonymous array.
>
> \@array returns a reference to the existing array
Thanks
------------------------------
Date: 10 Jan 2007 15:10:22 -0600
From: Lawrence Statton XE2/N1GAK <yankeeinexile@gmail.com>
Subject: Re: Working with array references
Message-Id: <87fyai8u69.fsf@gmail.com>
Frederik Vanderstraeten <frederik_vanderstraeten@yahoo.co.uk> writes:
> One more question: What's the best way to make an array reference of an
> existing array? perlreftut uses [@array], is it better than \@array?
Your exercise for the evening, class: Answer the question "What is the
difference between them?"
--
Lawrence Statton - lawrenabae@abaluon.abaom s/aba/c/g
Computer software consists of only two components: ones and
zeros, in roughly equal proportions. All that is required is to
sort them into the correct order.
------------------------------
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 12
*************************************