[31678] in Perl-Users-Digest

home help back first fref pref prev next nref lref last post

Perl-Users Digest, Issue: 2941 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed May 12 00:09:45 2010

Date: Tue, 11 May 2010 21:09:05 -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           Tue, 11 May 2010     Volume: 11 Number: 2941

Today's topics:
    Re: can't read from STDIN after system call <lndresnick@gmail.com>
    Re: can't read from STDIN after system call <uri@StemSystems.com>
    Re: can't read from STDIN after system call <lndresnick@gmail.com>
    Re: can't read from STDIN after system call <uri@StemSystems.com>
    Re: How can I use MAP to increment values in an array? <misterperl@gmail.com>
    Re: How can I use MAP to increment values in an array? <misterperl@gmail.com>
    Re: How can I use MAP to increment values in an array? <hjp-usenet2@hjp.at>
    Re: How can I use MAP to increment values in an array? <uri@StemSystems.com>
    Re: How can I use MAP to increment values in an array? <tadmc@seesig.invalid>
    Re: How can I use MAP to increment values in an array? <willem@turtle.stack.nl>
    Re: How can I use MAP to increment values in an array? <uri@StemSystems.com>
        How to control reading socket without waiting <hansyin@gmail.com>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

----------------------------------------------------------------------

Date: Tue, 11 May 2010 05:59:42 -0700 (PDT)
From: David Resnick <lndresnick@gmail.com>
Subject: Re: can't read from STDIN after system call
Message-Id: <3263952d-9b33-47e8-8c86-ba120447ebff@24g2000yqy.googlegroups.com>

On May 10, 2:45=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth David Resnick <lndresn...@gmail.com>:
>
>
>
> > On May 10, 12:56=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
> > > Quoth David Resnick <lndresn...@gmail.com>:
>
> > > > I've been poking at a script that loses the ability to ready from
> > > > <STDIN> after doing a system() call.
>
> > > Please post your code, and also your OS and version of perl. Somethin=
g
> > > like
>
> > > =A0 =A0 perl -E'system "cat"; say scalar <STDIN>;'
>
> > > works just fine for me here. (The first ^D sends EOF to cat, and any
> > > subsequent lines are happily read by perl.)
>
> > As I mentioned in the follow up, closing stdin on the system command
> > fixed it.
>
> > It does not apply to any command, I discovered that early on. =A0Once I
> > saw that the "system" command is what seemed to mess up my STDIN, I
> > tried the "date" run via system, didn't cause the issue.
>
> > The relevant part of the code is here. =A0Note sipp is an open source
> > tool to handle SIP traffic. =A0When run normally it does look for input
> > in STDIN.
>
> > =A0 =A0 =A0 =A0 getline("hit return when ready to execute test $testNam=
e\n");
>
> > =A0 =A0 =A0 =A0 my $sippCommand =3D "$vobBase/thparty3/sipp/sipp -sf " =
 .
> > =A0 =A0 =A0 =A0 =A0 =A0 "$sippFile $remoteIpAddress -trace_msg -m 1 -l =
1 -key
> > testname $testName -key testdir $outputDirRoot/$testName" .
> > =A0 =A0 =A0 =A0 =A0 =A0 " > /dev/null 2> /dev/null 0<&-";
>
> It's generally safer to redirect stdin from /dev/null rather than
> closing it. Closing it means the first file sipp opens will appear on
> its fd 0, which may have unfortunate consequences.
>
> > If I don't do the 0<&- in the system call, all future calls to <STDIN>
> > return eof. But that seems to fix my problem, so I'm now merely just
> > curious as to why this happens. =A0I'm still mystified as to why, as I
> > thought that system would create an independent process that couldn't
> > alter its parents file descriptor state in any way.
>
> It does create a separate process, but the two filehandles are still
> somewhat connected. I can't see, off the top of my head, what sipp could
> be doing to cause your STDIN to return EOF, but if you're interested you
> could run the whole thing under strace to find out what it actually does
> to fd 0.
>
> Ben

I was still a bit curious, so I examined the sipp source code for how
they mucked with stdin.  Here is a minimal perl script and C program
that allows reproduction of the problem.

temp(1726)$ cat foo.pl
#!/usr/bin/perl -w

use strict;

my $line =3D <STDIN>;

print "got: $line";

if ( ! $line )
{
    die("STDIN returns undef before system call");
}

system("foo");

$line =3D <STDIN>;

if ( ! $line  )
{
    die("STDIN returns undef before system call");
}

print "got: $line";


***********

temp(1727)$ cat foo.c
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{
    printf("about to fcntl\n");
    fcntl(fileno(stdin), F_SETFL, fcntl(fileno(stdin), F_GETFL) |
O_NONBLOCK);
    return 0;
}


Hmmm.  Apparently this fcntl crocks the parent perl scripts STDIN.
OK, I have a work around, guess I'm done with this issue.  Thanks for
your help!

-David


------------------------------

Date: Tue, 11 May 2010 14:46:36 -0400
From: "Uri Guttman" <uri@StemSystems.com>
Subject: Re: can't read from STDIN after system call
Message-Id: <87wrvaqnsj.fsf@quad.sysarch.com>

>>>>> "DR" == David Resnick <lndresnick@gmail.com> writes:

  DR> I was still a bit curious, so I examined the sipp source code for how
  DR> they mucked with stdin.  Here is a minimal perl script and C program
  DR> that allows reproduction of the problem.

and it is now obvious what the cause of the problem is.

  DR> system("foo");

stdin is no in nonblocking mode (what foo does). so since you haven't
typed anything quickly, <>  will return immediately and be
undef. sipp/foo are doing async stdio, likely some form of terminal
screen stuff or whatever. clean programs will return stdin to the normal
blocking mode when they exit. you can do that in your perl easily with
IO::Handle's nonblocking method. something like this should do:

	use IO::Handle ;

	STDIN->nonblocking(0) ;

  DR> ***********
  DR>     printf("about to fcntl\n");
  DR>     fcntl(fileno(stdin), F_SETFL, fcntl(fileno(stdin), F_GETFL) |
  DR> O_NONBLOCK);


  DR> Hmmm.  Apparently this fcntl crocks the parent perl scripts STDIN.
  DR> OK, I have a work around, guess I'm done with this issue.  Thanks for
  DR> your help!

if your workaround is anything more complex than mine, switch it. all
you need to do is set clear the nonblocking flag after you run sipp.

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------


------------------------------

Date: Tue, 11 May 2010 14:07:06 -0700 (PDT)
From: David Resnick <lndresnick@gmail.com>
Subject: Re: can't read from STDIN after system call
Message-Id: <708e6e87-0df9-44ca-8254-ca8b809b70bd@s29g2000yqd.googlegroups.com>

On May 11, 2:46=A0pm, "Uri Guttman" <u...@StemSystems.com> wrote:
> >>>>> "DR" =3D=3D David Resnick <lndresn...@gmail.com> writes:
>
> =A0 DR> I was still a bit curious, so I examined the sipp source code for=
 how
> =A0 DR> they mucked with stdin. =A0Here is a minimal perl script and C pr=
ogram
> =A0 DR> that allows reproduction of the problem.
>
> and it is now obvious what the cause of the problem is.
>
> =A0 DR> system("foo");
>
> stdin is no in nonblocking mode (what foo does). so since you haven't
> typed anything quickly, <> =A0will return immediately and be
> undef. sipp/foo are doing async stdio, likely some form of terminal
> screen stuff or whatever. clean programs will return stdin to the normal
> blocking mode when they exit. you can do that in your perl easily with
> IO::Handle's nonblocking method. something like this should do:
>
> =A0 =A0 =A0 =A0 use IO::Handle ;
>
> =A0 =A0 =A0 =A0 STDIN->nonblocking(0) ;
>
> =A0 DR> ***********
> =A0 DR> =A0 =A0 printf("about to fcntl\n");
> =A0 DR> =A0 =A0 fcntl(fileno(stdin), F_SETFL, fcntl(fileno(stdin), F_GETF=
L) |
> =A0 DR> O_NONBLOCK);
>
> =A0 DR> Hmmm. =A0Apparently this fcntl crocks the parent perl scripts STD=
IN.
> =A0 DR> OK, I have a work around, guess I'm done with this issue. =A0Than=
ks for
> =A0 DR> your help!
>
> if your workaround is anything more complex than mine, switch it. all
> you need to do is set clear the nonblocking flag after you run sipp.
> -----
Thanks for the comments.

My work around is simple, in the system() invocation I redirect stdin
to take input from /dev/null (closing stdin in the system call also
works).  I think (and you suggest above) that it is a bug in sipp --
it should put stdin back to how it found it prior to exiting.  I may
suggest that to the sipp devs.

The part that surprised me and made this a bit painful was that I had
no idea the process launched by the system command could muck with the
parents i/o.  I guess I had an understanding that after system fork
and execs the new command the new process was basically independent.
Apparently not completely...

-David


------------------------------

Date: Tue, 11 May 2010 18:20:47 -0400
From: "Uri Guttman" <uri@StemSystems.com>
Subject: Re: can't read from STDIN after system call
Message-Id: <871vdikrls.fsf@quad.sysarch.com>

>>>>> "DR" == David Resnick <lndresnick@gmail.com> writes:

  DR> My work around is simple, in the system() invocation I redirect stdin
  DR> to take input from /dev/null (closing stdin in the system call also
  DR> works).  I think (and you suggest above) that it is a bug in sipp --
  DR> it should put stdin back to how it found it prior to exiting.  I may
  DR> suggest that to the sipp devs.

normally the shell will return the terminal to a sane mode (it didn't in
the old days) and the sipp dev team may not have noticed for that reason.

  DR> The part that surprised me and made this a bit painful was that I
  DR> had no idea the process launched by the system command could muck
  DR> with the parents i/o.  I guess I had an understanding that after
  DR> system fork and execs the new command the new process was
  DR> basically independent.  Apparently not completely...

forked processes have their own memory and many private things but they
can share stdio and usually do. that is how sipp even gets to use stdio
from the terminal after you fork it. otherwise it wouldn't be able to
get any terminal i/o. this has always been the case for unix
forking. the shell opens (or rather init does) the terminal one time and
the 3 fds (0,1,2) are share with forked children so they can do stdio
and not need to know which terminal to open. the other side of this is
when you want a child not to deal with the terminal it will usually
close stdio. in your case redirectling stdin from /dev/null did it.

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------


------------------------------

Date: Tue, 11 May 2010 12:18:47 -0700 (PDT)
From: Mr P <misterperl@gmail.com>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <c9085cb1-ed88-4a1b-8c8e-5de3906a8c0d@k29g2000yqh.googlegroups.com>

]
> =A0 P> =A0 $c++; # wow that's weird
>
> wierd in what way?
Weird in that the variable name accidentally stumbled on another
language? Just a little bad humor Uri no worries..

>
> =A0 P> =A0 $_ .=3D " $c";
> =A0 P> =A0}
>
> =A0 P> But what I'd prefer is something like
>
> =A0 P> =A0 my $c =3D 1;
> =A0 P> =A0 map s/^(CAT)/$1 $c++/e, @a;
>
> that won't work. the replacement is an expression with /e. you are
> thinking it is a string AND an expression. so make an expression
> (multiple statements are allowed) with the last one being the
> replacement value. something like this: (untested)
>
> s/^(CAT)/$c++ ; "$1 $c:/e foreach @a;
>
> and don't use map without returning a list. foreach modifier is better
> for that.
respectfully- this is just another way to specify a for loop-
precisely what I was trying to avoid..


>
> =A0 P> I read and read on this, and I also tried:
> =A0 P> =A0 map s/^(CAT)/$1 $c++/e, @a;
>
> =A0 P> since it appeared that within the RHS of the s///, a single + was =
an
> =A0 P> increment operator.
>
> huh??
Maybe I mis-read
>
> =A0 P> Am I in the ballpark here guys? Everything I've tried results in
> =A0 P> interpreter errors.
>
> well, everything you tried is a syntax error. as i said, the code in the
> replacement part must be a valid expression under /e.
>
> this by itself is not valid perl:
>
> $1 $c++
>
> uri
-
> --------- =A0Gourmet Hot Cocoa Mix =A0---- =A0http://bestfriendscocoa.com=
---------

Thanks Uri and everyone, but to summarize , what I'm attempting to do,
apparently,  isn't supported..

It seems odd to me that it's not, I want to MAP an incremented value
over an array- sounds like a perfectly logical thing to want to do?

I realize of course from my, and everyone else's contributions, there
are myriad ways to accomplish this with for or foreach. But that's
precisely what I DID NOT want to do. THat's the beauty and elegance of
map- it operates in 2D.


------------------------------

Date: Tue, 11 May 2010 12:26:02 -0700 (PDT)
From: Mr P <misterperl@gmail.com>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <327b577b-7469-481f-a144-a04d09566f1d@o8g2000yqo.googlegroups.com>


>
> perl -MData::Dumper -wle'
> =A0 =A0my (@r, %c);
> =A0 =A0push @r, [$_, ++$c{$_}]
> =A0 =A0 =A0for qw/ CAT DOG CAT MOUSE EEL CAT /;
> =A0 =A0print Dumper(\@r);
> '
>
> --
> Ruud

Thank-You sir but I was looking for a "mapish" one-liner. I like your
style though!


------------------------------

Date: Tue, 11 May 2010 21:41:30 +0200
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <slrnhujcna.dd.hjp-usenet2@hrunkner.hjp.at>

On 2010-05-11 19:18, Mr P <misterperl@gmail.com> wrote:
>>
>>   P>   $_ .= " $c";
>>   P>  }
>>
>>   P> But what I'd prefer is something like
>>
>>   P>   my $c = 1;
>>   P>   map s/^(CAT)/$1 $c++/e, @a;
>>
>> that won't work. the replacement is an expression with /e. you are
>> thinking it is a string AND an expression. so make an expression
>> (multiple statements are allowed) with the last one being the
>> replacement value. something like this: (untested)
>>
>> s/^(CAT)/$c++ ; "$1 $c:/e foreach @a;
>>
>> and don't use map without returning a list. foreach modifier is better
>> for that.
> respectfully- this is just another way to specify a for loop-
> precisely what I was trying to avoid..

In some sense map is also just another way to specify a for loop.

The difference is mainly that map returns a result, but for doesn't. So
the rule in perl is: If you are interested in the result, use map.
Otherwise use for. 

You don't use the result of the map, so you should use for. 
(it does the same thing, but it's more readable)


>>   P> I read and read on this, and I also tried:
>>   P>   map s/^(CAT)/$1 $c++/e, @a;
[...]
>> well, everything you tried is a syntax error. as i said, the code in the
>> replacement part must be a valid expression under /e.
>>
>> this by itself is not valid perl:
>>
>> $1 $c++
>>
>
> Thanks Uri and everyone, but to summarize , what I'm attempting to do,
> apparently,  isn't supported..

It is. Uri already gave you one solution. Plus several hints in the
right direction.

I'll give you another hint:

Uri wrote that
    $1 $c++
by itself is not valid perl.

You cannot (for example) write
    $x = $1 $c++;

How would you write this line, so that it becomes valid Perl and does
what you want? If you know this you also know how to rewrite your
substitution so that it works.

	hp


------------------------------

Date: Tue, 11 May 2010 16:06:07 -0400
From: "Uri Guttman" <uri@StemSystems.com>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <874oiep5jk.fsf@quad.sysarch.com>

>>>>> "P" == P  <misterperl@gmail.com> writes:

  >>   P>   my $c = 1;
  >>   P>   map s/^(CAT)/$1 $c++/e, @a;
  >> 
  >> that won't work. the replacement is an expression with /e. you are
  >> thinking it is a string AND an expression. so make an expression
  >> (multiple statements are allowed) with the last one being the
  >> replacement value. something like this: (untested)
  >> 
  >> s/^(CAT)/$c++ ; "$1 $c:/e foreach @a;
  >> 
  >> and don't use map without returning a list. foreach modifier is better
  >> for that.

  P> respectfully- this is just another way to specify a for loop-
  P> precisely what I was trying to avoid..

huh?? map IS a loop too! you are just using map for the loop and not for
the primary purpose which is to return a list. since you don't return a
list, don't mislead the code reader with map. use foreach modifier which
says i am doing something in a loop and not building up a list.
  >> 
  >>   P> I read and read on this, and I also tried:
  >>   P>   map s/^(CAT)/$1 $c++/e, @a;
  >> 
  >>   P> since it appeared that within the RHS of the s///, a single + was an
  >>   P> increment operator.
  >> 
  >> huh??
  P> Maybe I mis-read
  >> 
  >>   P> Am I in the ballpark here guys? Everything I've tried results in
  >>   P> interpreter errors.
  >> 
  >> well, everything you tried is a syntax error. as i said, the code in the
  >> replacement part must be a valid expression under /e.
  >> 
  >> this by itself is not valid perl:
  >> 
  >> $1 $c++
  >> 
  >> uri
  P> -
  >> ---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com---------

  P> Thanks Uri and everyone, but to summarize , what I'm attempting to do,
  P> apparently,  isn't supported..

no, your brain isn't supporting it. perl can do what you want as long as
you code it correctly. you have SYNTAX errors in your code. as well as a
misunderstanding of the semantics of /e.

  P> It seems odd to me that it's not, I want to MAP an incremented value
  P> over an array- sounds like a perfectly logical thing to want to do?

stop capitalizing MAP. it is map and you really want foreach modifier as
i keep saying. otherwise you are misleading the code reader. this is not
an obsfucation contest, use the correct feature.

  P> I realize of course from my, and everyone else's contributions,
  P> there are myriad ways to accomplish this with for or foreach. But
  P> that's precisely what I DID NOT want to do. THat's the beauty and
  P> elegance of map- it operates in 2D.

no it doesn't. you don't get map vs foreach modifier vs a full
loop. they ALL LOOP. they are different in syntax and semantics but they
are all loops. you need a loop. even a /g on your s/// will be a
LOOP. you can't avoid LOOPS if you want to do something over and over.

and you can even avoid map likely with a /g modifier. but i don't think
i will help you until you learn about perl LOOPS, implied or explicit.

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------


------------------------------

Date: Tue, 11 May 2010 15:16:19 -0500
From: Tad McClellan <tadmc@seesig.invalid>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <slrnhujef6.ove.tadmc@tadbox.sbcglobal.net>

Uri Guttman <uri@StemSystems.com> wrote:

> but i don't think
> i will help you until


You are slow on the uptake :-)

I've been ignoring this poster for years.

http://groups.google.com/groups/search?as_umsgid=1135692143.665441.112530%40g14g2000cwa.googlegroups.com


-- 
Tad McClellan
email: perl -le "print scalar reverse qq/moc.liamg\100cm.j.dat/"
The above message is a Usenet post.
I don't recall having given anyone permission to use it on a Web site.


------------------------------

Date: Tue, 11 May 2010 20:20:36 +0000 (UTC)
From: Willem <willem@turtle.stack.nl>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <slrnhujf0k.b2g.willem@turtle.stack.nl>

Mr P wrote:
)> s/^(CAT)/$c++ ; "$1 $c:/e foreach @a;
)>
)> and don't use map without returning a list. foreach modifier is better
)> for that.
) respectfully- this is just another way to specify a for loop-
) precisely what I was trying to avoid..

map is also just another way to specify a for loop.

) Thanks Uri and everyone, but to summarize , what I'm attempting to do,
) apparently,  isn't supported..

Of course it is.  If you want to keep the original array intact,
and you want a *new* array with the counters added, *then* map is
useful:

  my $c = 0;
  my @result = map { $_.(/^CAT$/ && ' '.++$c) } @source;

But that's still a loop over each separate element of the array.

) It seems odd to me that it's not, I want to MAP an incremented value
) over an array- sounds like a perfectly logical thing to want to do?
)
) I realize of course from my, and everyone else's contributions, there
) are myriad ways to accomplish this with for or foreach. But that's
) precisely what I DID NOT want to do. THat's the beauty and elegance of
) map- it operates in 2D.

No it doesn't.  It's just a for loop that returns an array of results.

This is map, basically:

sub map (&@) {
  my $func = shift;
  my @result;
  push @result, &$func for @_;
  return @result;
}

If you don't use the result of map, then it is *exactly* the same as for.
(In recent versions of perl, map even checks if it is called in a void
 context, and if so it switches to a for-loop.)


SaSW, Willem
-- 
Disclaimer: I am in no way responsible for any of the statements
            made in the above text. For all I know I might be
            drugged or something..
            No I'm not paranoid. You all think I'm paranoid, don't you !
#EOT


------------------------------

Date: Tue, 11 May 2010 16:22:31 -0400
From: "Uri Guttman" <uri@StemSystems.com>
Subject: Re: How can I use MAP to increment values in an array?
Message-Id: <87iq6unq7s.fsf@quad.sysarch.com>

>>>>> "TM" == Tad McClellan <tadmc@seesig.invalid> writes:

  TM> Uri Guttman <uri@StemSystems.com> wrote:
  >> but i don't think
  >> i will help you until

  TM> You are slow on the uptake :-)

and you just learned this now? :)

  TM> I've been ignoring this poster for years.

  TM> http://groups.google.com/groups/search?as_umsgid=1135692143.665441.112530%40g14g2000cwa.googlegroups.com

yep, same old dog and no new tricks.

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------


------------------------------

Date: Tue, 11 May 2010 18:18:58 -0700 (PDT)
From: Hans <hansyin@gmail.com>
Subject: How to control reading socket without waiting
Message-Id: <f5172ce7-ae33-4ae1-97e3-722aae060288@g39g2000pri.googlegroups.com>

Hi,
I'm trying to write a udp client script, I already have:

my $sock = new IO::Socket::INET (
                        PeerAddr => $host,
                        PeerPort => $port,
                        Proto => $proto,
                        );
die "Could not create socket: $!\n" unless $sock;
my $do =1;
while $do {
        print $sock "ping request from initiator,id is $i \n";
        if ($line = <$sock>) {
                print "receive: $line \n";
        }
        $i++;
        sleep(1);
}


My problem is it will always wait to receive something before sending
next ping request. if no response from server, then it stops sending.

I hope it can keep sending no matter if there is response.

Anybody can help? thanks!


Hans


------------------------------

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 2941
***************************************


home help back first fref pref prev next nref lref last post