[8402] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 2019 Volume: 8

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Mar 4 10:13:26 1998

Date: Wed, 4 Mar 98 07:00:43 -0800
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, 4 Mar 1998     Volume: 8 Number: 2019

Today's topics:
    Re: $$ref->{$_} undefined after passing by ref? (John Klassa)
    Re: $0: which OSes? <webmaster@fccjmail.fccj.cc.fl.us>
        bizzare split problem Matthew.Wickline@usa.net
    Re: Context Sensitive RexExp <Alex_Whittaker-1@sbphrd.com>
        Displaying subdirectories and not filenames <bob@cafemedia.com>
    Re: Duplicating 'tail -n' functionality in Perl <jdporter@min.net>
    Re: Easy Unix Problem (4 U Guys) (Tony Bass)
    Re: line number indication in Perl (Andrew M. Langmead)
    Re: line number indication in Perl (I R A Aggie)
    Re: line number indication in Perl (Mike Stok)
    Re: modifying a line in a file <webmaster@fccjmail.fccj.cc.fl.us>
    Re: New to NT and perl <tegels@home.com>
        Perl on MS Personal Web Server (Steven Savage)
    Re: Q: Emacs and making it indent perl code (Jeffrey R. Drumm)
        Q: How to <lsj@bnl.gov>
    Re: Question : forms processing in perl - newbie questi <jdporter@min.net>
        Quiz <wolfgang.bergbauer@munich.netsurf.de>
    Re: Quiz <jdporter@min.net>
    Re: QUIZ: answer and hash slice tutorial <stuartc@ind.tansu.com.au>
    Re: QUIZ: answer and hash slice tutorial <merlyn@stonehenge.com>
    Re: QUIZ: answer and hash slice tutorial (Andrew M. Langmead)
        Structure of Perl data types? <anle@ehsn6.ews.uiuc.edu>
    Re: Structure of Perl data types? <tchrist@mox.perl.com>
    Re: Summing Up Array Values - How Do I? <merlyn@stonehenge.com>
    Re: Summing Up Array Values - How Do I? <merlyn@stonehenge.com>
    Re: The -w switch (was Re: better way to do this?) <tchrist@mox.perl.com>
    Re: The -w switch (was Re: better way to do this?) <zenin@best.com>
    Re: The -w switch (was Re: better way to do this?) <zenin@best.com>
    Re: The -w switch (was Re: better way to do this?) <tchrist@mox.perl.com>
    Re: What is PERL? Learn JAVA instead? (Tor Iver Wilhelmsen)
    Re: What is PERL? Learn JAVA instead? (Tor Iver Wilhelmsen)
    Re: What is PERL? Learn JAVA instead? scott@softbase.com
        Digest Administrivia (Last modified: 8 Mar 97) (Perl-Users-Digest Admin)

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

Date: 4 Mar 1998 13:47:59 GMT
From: klassa@aursgh.aur.alcatel.com (John Klassa)
Subject: Re: $$ref->{$_} undefined after passing by ref?
Message-Id: <6djm2f$ssa$1@aurwww.aur.alcatel.com>

On 4 Mar 1998 11:47:12 GMT, Jason Nugent <ap958@chebucto.ns.ca> wrote:
->My problem is that I am using the existance of keys in this hash as a
->way to prevent an event from taking place.  just to make sure I can
->still see the hash inside the foreach loop, I put a print statement
->inside it:

Make sure you use "exists" and/or "defined", depending on what you're
trying to do, exactly.  Note that they're not the same...

-- 
John Klassa / Alcatel Telecom / Raleigh, NC, USA <><


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

Date: Wed, 04 Mar 1998 11:58:08 GMT
From: Bill Jones <webmaster@fccjmail.fccj.cc.fl.us>
Subject: Re: $0: which OSes?
Message-Id: <34FD409A.9D79B651@fccjmail.fccj.cc.fl.us>

Very interesting.
Maybe on Solaris the $0 become a local assignment
and does not propagate?

Bill



Gautam Srikanth wrote:

> Excerpts from netnews.comp.lang.perl.misc: 4-Mar-98
> Re: $0: which OSes? by Bill Jones@fccjmail.fccj.cc.fl.us
>
> > Hmmm, that's funny, on my Solaris 2.5.1 $0 reflects the ENTIRE name of the
> > program as invoked...
>
> That's consistent with Solaris' behavior here: the initial value of $0
> reflects the pathname of the program invoked.  The trouble is that
> assigning to $0 does not change its entry in a 'ps' at all.
>
> Linux is the only system I tried where a program's ps entry matched
> changes in $0.
>
> Gautam
>
> -=-=-
> Gautam Srikanth  -  morpheus@andrew.cmu.edu  -  www.andrew.cmu.edu/~morpheus
> "If opera is entertainment, then falling off a roof is transportation" (MAD)





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

Date: Wed, 04 Mar 1998 08:32:29 -0600
From: Matthew.Wickline@usa.net
To: wickline@essrl.wustl.edu
Subject: bizzare split problem
Message-Id: <6djokm$54n$1@nnrp1.dejanews.com>

First, here's the little program which will duplicate my problem...
(the problem follows below)

#!/usr/bin/perl -w
# % perl -v
# This is perl, version 5.003 with EMBED
#        built under solaris at Jan 31 1997 17:16:21
#        + suidperl security patch
############################################################

my $textstring = <<EOF;
a

b

c

d

e

f

EOF
my @block_sections = &break_textarea( $textstring );
my $i = 1;
for (@block_sections) {
        print " block $i= $_ \n\n";
        $i++;
}
sub break_textarea {
    my $textarea_string = shift;
    $textarea_string =~ s/^\s+//sm;
    $textarea_string =~ s/\s+$//sm;
    my @block_sections;
    @block_sections = split(/\n(?:\s*\n)+/, $textarea_string);
    my @non_empty_sections;
    my $counter = 0;
    for (@block_sections) {
        # we only want sections with at least 1 word in them
        if (m/\w+/sm) {
            $non_empty_sections[$counter] = $_ ;
            $counter++;
        }
    }
    return @non_empty_sections;
}
############################################################


I expect the above to print consider each of a b c d e and f as a block....
but when I run the program, I find that the first three letters all got
slammed into the first item, and the other letters were handled as I expected.

Can anyone help me understand why this is happening?
Do you find the same results on your system? Initially, I had capturing quotes
in the split pattern, but after reading Jeffrey Friedl's book, I caught that
one. However, I get the same problem w/ non-capturing parens (and besides:
that doesn't even seem to be the proper response for capturing parens!!!)

I'm lost :(

I'm running out of hair to pull from my head. ;)

Please reply to the reply-to address as I don't generally follow the
newsgroup, and I'll need the answer at work (essrl.wustl.edu). Also, I've
tried to send this message through three different newservers this morning,
and finally had to use deja news on the web to get this msg out! So... odds
are I may be *unable* to read your reply unless you cc me directly.


TIA for any help! :)

-matt

-----== Posted via Deja News, The Leader in Internet Discussion ==-----
http://www.dejanews.com/   Now offering spam-free web-based newsreading


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

Date: Wed, 04 Mar 1998 12:37:11 +0000
From: Alex Whittaker <Alex_Whittaker-1@sbphrd.com>
Subject: Re: Context Sensitive RexExp
Message-Id: <34FD4AF6.BE1E485@sbphrd.com>

>>  The core problem is that the second .* is given context by the first
one,
>> so that the pattern fails to be context free.

> why are you concerned about whether or not the match pattern is
> context-free?

  I'm not concerned, just speculating that the nature of the problem may
make it unresolvable for all situations.

  Essentially the problem boils down to the relationship between the two
 .* patterns.  Say, for example that I want this to be true:

  perl -ne 'print "happy\n" if (/^(.*ABC.*)ABC/  && length($1) < 20
&& length$1 > 10)'

  Here is the test set:

  XXXXABCXXXXABC
  XXXXXXXXXXXXXXXXXXXXABCXXXABC

  The first succeeds, the second fails.  Now consider this one:

  XXXXABCXXXXABCXXXXXXXXXXXXABC

  It fails, the .* greedily gobbles up the first ABC and consequently $1
is too long.

  We can of course make this work by using .*? thus:

  perl -ne 'print "happy\n" if (/^(.*?ABC.*?)ABC/  && length($1) < 20
&& length$1 > 10)'

  But now, what happens with this example:

  XABCABCXXXXABCXXXXXXXABC

  It will only work if the second ABC is picked out by $1 but neither .*
nor .*?  will find it..

  I could split the difference something like this:

  perl -ne 'print "happy\n" if (/^(.{4,8}ABC.{4,8)ABC/  && length($1) <
20  && length$1 > 10)'

  But this is obviously unsatisfactory for other examples such as:

  XABCXXABCXXABCXXXXXXXXXXXABC

  So I guess I need to have a regexp that looks something like this

  /^(.{11,19}ABC.{11,19)ABC/

  But the second {11,19} is restricted by the first one, hence the
context sensitivity, the first query set the context for the second.

 I appreciate that we can write a very complex regexp which includes all
of the possiblilities, which looks something like:

 /^(?:ABC.{8,16}|.{1}ABC.{7,15}|.{2}ABC.{6,14}|..etc..)ABC/

  But I really would like a general solution.

  Thoughts?


-- Alex Whittaker --
 SmithKline Beecham Pharmaceuticals
 New Frontiers Science Park          Alex_Whittaker-1@sbphrd.com
 Harlow, CM19 5AW                    All I know is that I know nothing





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

Date: Wed, 04 Mar 1998 09:50:26 -0500
From: Bob Maillet <bob@cafemedia.com>
Subject: Displaying subdirectories and not filenames
Message-Id: <34FD6A32.2DFBD0B7@cafemedia.com>

I am currently using opendir but would only like the subdirectories to
be displayed and not the files which are in the directory I am opening.
Any ideas?

Bob



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

Date: Wed, 04 Mar 1998 08:33:27 -0500
From: John Porter <jdporter@min.net>
Subject: Re: Duplicating 'tail -n' functionality in Perl
Message-Id: <34FD5827.6F86@min.net>

Matt Sephton wrote:
> 
> I need to get the last few thousand lines of a couple-of-hundred MB
> access_log file, which means that the standard 'tail -3000' command is
> unsuitable with it's limitation of 20k. I have also tried using 'wc -l'
> and then 'calc' and 'sed' to compute the number of lines in the file and
> then to get the last few thousand.
> 
> Is there any way of acieving this in Perl 5? Or does anybody know of a
> version of tail with no buffer size limit ?

One way (perhaps not the best?) is to use a circular buffer. E.g.:

my $max_lines = 3000;
my @buf;

for (<>) {
  shift @buf  if ( @buf >= $max_lines );
  push @buf, $_;
}

print @buf;

Actually I guess this is a queue, rather than a circular buffer.
But same diff, in perl.

hth,
John Porter


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

Date: 4 Mar 1998 12:45:04 -0000
From: aeb@brains.cartoon.bt.co.uk (Tony Bass)
Subject: Re: Easy Unix Problem (4 U Guys)
Message-Id: <6djicg$2j1$1@brains.cartoon.bt.co.uk>

>From article <34FC9D3C.5AC05BED@millcomm.com>, by James Ludlow <jdludlow@millcomm.com>:
> Elf Sternberg wrote:
> [snip]
>>         To those reading this on comp.lang.perl, is there an easier
>> way to split a line 'every nth character' without the cockamamie
>> while/for/substr construction I've got up there?  I actually have
>> wracked my brains on this before without coming up with a satisfactory
>> answer.

> I'd still love to see this as a one liner, but here's my version of it:

> #!/usr/bin/perl -w

> # Set up our two varaibles
> $big_long_line = "01234567890abcdefghijklmnop";
> $split_every = 2;

> # Split the line into pieces
> @line = (split /(.{0,$split_every})/, $big_long_line);

> # Only the odd array members are useful
> for ($i=1;$i<=$#line;$i+=2) {
>    push @foo, $line[$i];
> }

> # Put the line back together
> $line = join " ", @foo;

> print "$line\n";

> You could use "map" to do this over the entire text file.  If $split_every is
> greater than the length of the screen, you get the whole string as one
> element.  If $split_every equals 0 then you get nothing.


One can use a map pipeline to split and rejoin lines, as in

   #! /usr/local/bin/perl -w
   use strict;
   my $n = 3;
   grep print("$_\n"),
    map join('/', @$_),
    map [m/.{1,$n}/g],
    <DATA>;
   __DATA__
   01234567890abcdefghijklmnop
   q01234567890abcdefghijklmnop
   rs01234567890abcdefghijklmnop
   tuv01234567890abcdefghijklmnop
   wxyz01234567890abcdefghijklmnop

with output

   012/345/678/90a/bcd/efg/hij/klm/nop
   q01/234/567/890/abc/def/ghi/jkl/mno/p
   rs0/123/456/789/0ab/cde/fgh/ijk/lmn/op
   tuv/012/345/678/90a/bcd/efg/hij/klm/nop
   wxy/z01/234/567/890/abc/def/ghi/jkl/mno/p



or with an extra filter to pick out odd fields

   grep print("$_\n"),
    map join('/', @$_),
    map { my $c = 0; [grep $c^=1, @$_]; }
    map [m/.{1,$n}/g],
    <DATA>;

with output

   012/678/bcd/hij/nop
   q01/567/abc/ghi/mno
   rs0/456/0ab/fgh/lmn
   tuv/345/90a/efg/klm
   wxy/234/890/def/jkl/p

if indeed that is the requirement - I fear the original request may be
mutating.



Split may be preferable in some situations but I think here tends to
produce extra empty fields, which m//g avoids; and I preferred {1,$n}
to {0,$n} for similar reason.

Void grep avoiders can use the

   foreach (map join('/', @$_),
     map { my $c = 0; [grep $c^=1, @$_]; }
     map [m/.{1,$n}/g],
     <DATA>) {
    print("$_\n");
    };

style.



>From another thread,

>>Thou shalt not use map in a void context! :)
> <snip>
> Why not? [...]

Because it is undocumented behaviour in the second camel.


    Tony Bass

-- 
# A E Bass                                      Tel: (01473) 645305
# MLB 3/19, BT Laboratories                     e-mail: aeb@saltfarm.bt.co.uk
# Martlesham Heath, Ipswich, Suffolk, IP5 7RE   DO NOT e-mail to From: line
#                                               Opinions are my own


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

Date: Wed, 4 Mar 1998 14:21:42 GMT
From: aml@world.std.com (Andrew M. Langmead)
Subject: Re: line number indication in Perl
Message-Id: <EpAt86.E2C@world.std.com>

Francky Leyn <Francky.Leyn@esat.kuleuven.ac.be> writes:

>I'm looking for a way to specify in Perl a line number indication. Does
>this
>exist in Perl, and if so, what is the syntax?

It isn't documented as far as I have found, but perl supports the
"#line" directive, just like commonly used in C compilers. Either:

#line 256

or

#line 157 perlscript
-- 
Andrew Langmead


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

Date: Wed, 04 Mar 1998 09:28:01 -0500
From: fl_aggie@thepentagon.com (I R A Aggie)
Subject: Re: line number indication in Perl
Message-Id: <fl_aggie-0403980928010001@aggie.coaps.fsu.edu>

In article <34FD25F7.97B2C116@esat.kuleuven.ac.be>, Francky Leyn
<Francky.Leyn@esat.kuleuven.ac.be> wrote:

+ I'm using the literate programming tool noweb to document my Perl
+ programs. http://www.cs.virginia.edu/~nr/noweb/intro.html
+ This allows me to mix Perl code with LaTeX documentation in a single
+ source file.

Unless there's some reason you need LaTeX, why not use perl's own
inline documentation, POD?

James

-- 
Consulting Minister for Consultants, DNRC
The Bill of Rights is paid in Responsibilities - Jean McGuire
To cure your perl CGI problems, please look at:
<url:http://www.perl.com/CPAN-local/doc/FAQs/cgi/idiots-guide.html>


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

Date: 4 Mar 1998 14:45:19 GMT
From: mike@stok.co.uk (Mike Stok)
Subject: Re: line number indication in Perl
Message-Id: <6djpdv$83n@news-central.tiac.net>

In article <fl_aggie-0403980928010001@aggie.coaps.fsu.edu>,
I R A Aggie <fl_aggie@thepentagon.com> wrote:
>In article <34FD25F7.97B2C116@esat.kuleuven.ac.be>, Francky Leyn
><Francky.Leyn@esat.kuleuven.ac.be> wrote:
>
>+ I'm using the literate programming tool noweb to document my Perl
>+ programs. http://www.cs.virginia.edu/~nr/noweb/intro.html
>+ This allows me to mix Perl code with LaTeX documentation in a single
>+ source file.
>
>Unless there's some reason you need LaTeX, why not use perl's own
>inline documentation, POD?

It depends on what you're doing with the documentation and how you expect
orthers to use the documentation you've authored.  Literate programming
usually documents a lot more than the typical man page which is embedded
with pod. 

You can use literate programming to produce a script with embedded pod
documentation, they aren't mutually exclusive.  For some pointers to the
differences between literate programming, verbose commenting and man pages
you can look at http://shelob.ce.ttu.edu/daves/faq.html

Mike
-- 
mike@stok.co.uk                    |           The "`Stok' disclaimers" apply.
http://www.stok.co.uk/~mike/       |   PGP fingerprint FE 56 4D 7D 42 1A 4A 9C
http://www.tiac.net/users/stok/    |                   65 F3 3F 1D 27 22 B7 41
stok@colltech.com                  |            Collective Technologies (work)


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

Date: Wed, 04 Mar 1998 12:01:07 GMT
From: Bill Jones <webmaster@fccjmail.fccj.cc.fl.us>
To: Byron Jones <byronj@nd.edu.au>
Subject: Re: modifying a line in a file
Message-Id: <34FD414D.E6FC4348@fccjmail.fccj.cc.fl.us>

Mailed and Posted.

Re:  A  Better Way...

Not really, but see http://www.perl.com
Search on Security (my WebPass system)  or
for Shadow (not mine, but goodd for what you
want to do.)

HTH,
Bill


Byron Jones wrote:

> greets.
>
> first up, i'm a pascal programmer at heart, so my perl code sucks.  but i
> wanna learn, so ..
>
> i've got a program that stores its data in the same format as
> /etc/passwd.  i can read and append to this file without problems (easy).
> is there any way of modifing/replacing/deleting a single line in the file?
>
> in pascal, i'd have to read through each line, writing to a temp file, and
> modify the target line as it is read.  then remove the orig file and
> rename the temp file.
>
> in perl, being so full of funk, has gotta have a better way.
>
> -[ Byron Jones ]--------------------------------------------
>    Communications Manager    byronj@nd.edu.au
>    Notre Dame University     http://www.nd.edu.au/byronj/
>    Perth, Western Australia  ftp://t-man.nd.edu.au/pub/
> -[ "Dinosaurs have evolved from Peanut Butter" Symon Aked ]-





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

Date: Wed, 4 Mar 1998 07:28:17 -0600
From: "Kent L. Tegels" <tegels@home.com>
Subject: Re: New to NT and perl
Message-Id: <6djktb$1g2$1@ha2.rdc1.ne.home.com>

>From the FAQ at http://www.roth.net/odbcfaq.htm

"What does "Parse Exception" mean?

When Win32::ODBC is compiled it is compiled to run with a specific build of
Win32 Perl. If Activeware makes internal changes to Win32 Perl that are not
compatible with the specific build of Win32::ODBC you are using, you will
see the infamous "Parse Exception" error. This simply means that you can not
use the particular build of Win32::ODBC and Win32 Perl. This usually takes
place if you upgrade to a newer build of Win32 Perl.

The solution is to either not upgrade to the newer build of Win32 Perl or
wait for a newer build of Win32::ODBC. You can always recompile it yourself
if you want."


Kent L. Tegels
www.tegels.org
"Per ardua ad astra"




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

Date: 4 Mar 1998 14:19:03 GMT
From: badger@infinet.com (Steven Savage)
Subject: Perl on MS Personal Web Server
Message-Id: <6djnsn$41r@news1.infinet.com>


I've been wrestling with getting PERL to work on an MS Personal Web 
Server to demo a PERL search engine.  Does anyone know how to get this to 
work?  it seems my file associations just aren't enough.


--
BADGER
(aka Steve Savage)
------------------------------------------------------------------
Badger's Den:
http://www.infinet.com/~badger

MEMBER OF:
Association of Internet Professionals: http://www.association.org/
Java Lobby: http://www.javalobby.com/
------------------------------------------------------------------


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

Date: Wed, 04 Mar 1998 14:29:23 GMT
From: drummj@mail.mmc.org (Jeffrey R. Drumm)
Subject: Re: Q: Emacs and making it indent perl code
Message-Id: <34fd599d.72509132@news.mmc.org>

On 4 Mar 1998 07:43:14 GMT, brieweb@aol.com (Brieweb) wrote:

(snip)
>
>Here is another thing I would like to do. I read that there is the
>cperl-mode.el with the perl distribution. Problem is with my GNU emacs on my PC
>running win95 I see all the lisp routines end in .elc . Does that mean they are
>compiled. Do I have to compile it?
>
>Thanks,
>
>Brian

This is more an emacs question than a Perl question; a more appropriate
newsgroup exists. That said . . .

You don't have to compile the file, but you can if you want to:

ESC-x byte-compile-file RETURN

supply the file name, and you'll have a cperl-mode.elc file. Then add:

(autoload 'perl-mode "cperl-mode" "alternate mode for editing Perl programs" t)
(setq cperl-hairy t)
(setq auto-mode-alist (cons '("\.pl" . perl-mode) auto-mode-alist))

to your .emacs file.  If you don't want all the bells and whistles turned on,
you can drop the cperl-hairy line.  And if you're a Gecko guy[1], you may want
to change the "\.pl" to "\.plx".

[1] _Learning Perl on Win32 Systems_ from O'Reilly and Associates

-- 
                               Jeffrey R. Drumm, Systems Integration Specialist
                       Maine Medical Center - Medical Information Systems Group
                                                            drummj@mail.mmc.org
"Broken? Hell no! Uniquely implemented!" - me


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

Date: Wed, 4 Mar 1998 09:21:07 -0500
From: "Lance" <lsj@bnl.gov>
Subject: Q: How to
Message-Id: <6djo0k$h2p$1@sun20.ccd.bnl.gov>

Hi, I have a four-column data file.  I need to abstract the third item from
the last line.  Is there a simple way to do this?  Thanks in advance.

--
Regards,
Lance
lsjATbnl.gov




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

Date: Wed, 04 Mar 1998 09:27:08 -0500
From: John Porter <jdporter@min.net>
Subject: Re: Question : forms processing in perl - newbie question
Message-Id: <34FD64BC.5431@min.net>

Av8oR wrote:
> 
> How would I parse a textarea field read form an html page so that when
> I write it out to the server I can format it as 40 character lines and
> capture and cr/lf's that may have been input.  Any help on this would
> be greatly appreciated

I have an excellent suggestion: learn perl.

Also, use CGI.pm.

John Porter


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

Date: Wed, 04 Mar 1998 13:04:02 +0100
From: Wolfgang Bergbauer <wolfgang.bergbauer@munich.netsurf.de>
Subject: Quiz
Message-Id: <34FD4332.97E232DD@munich.netsurf.de>

Hi there,

I have the following problem:

#!/usr/local/perl/bin/perl
open(foo, "echo p* | tr -s ' \t\r\f' '\\012\\012\\012\\012'|");
while(<foo>)
{
    print;
}

Why is in this case the result of the output the same as if you write
\012\012\012\012
in the string2 of the tr command ? It should not ! In the case of \\012
the first
backslash should escape the second one.

Thank you



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

Date: Wed, 04 Mar 1998 09:30:06 -0500
From: John Porter <jdporter@min.net>
Subject: Re: Quiz
Message-Id: <34FD656E.7EBA@min.net>

Wolfgang Bergbauer wrote:
> 

> #!/usr/local/perl/bin/perl
> open(foo, "echo p* | tr -s ' \t\r\f' '\\012\\012\\012\\012'|");

> Why is in this case the result of the output the same as if you write
> \012\012\012\012
> in the string2 of the tr command ? It should not ! In the case of \\012
> the first
> backslash should escape the second one.


All that text is in a perl double-quoted string, which means special
characters are processed.  In the case of \\, the result is \.
The remaining single \ is what is passed to the tr command.

If the string had been single-quoted, the \\ would have been passed
to tr.

hth,
John Porter


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

Date: 05 Mar 1998 00:20:57 +1100
From: Stuart Cooper <stuartc@ind.tansu.com.au>
Subject: Re: QUIZ: answer and hash slice tutorial
Message-Id: <yeou39ey4li.fsf@kudu.ind.tansu.com.au>

> From uri@sysarch.com Wed Mar  4 18:19:10 1998
> ================================================================
> well, it goes to show you that when you try to inject something useful
> into this group, it fails. i had only 2 (TWO) respondants to my
> quiz. anyway i still decided to write up the answer and some extra
> tutorial stuff on the theme. if you find this kind of stuff useful, let
> me know and maybe it could be made a (semi) regular kind of post
> (especially with help from other perl hackers for quiz ideas and
> answers).

Sorry you didn't get many respondents, Uri, particularly since you went to
such trouble to inject usefulness into this group and everything. Usefulness
is a hard thing to gauge on comp.lang.perl.misc; I've given several
helpful answers to posters and never heard a tweet; an innocuous comment
on Intel brought me a few replies. If you want strong feedback; here's
some surefire winners:
	"Tom Christiansen is elitist"
	"Is Perl Year 2000 compliant?" (bonus: ask about Perl 4)
	"My browser won't run my CGI script"
	"I need a compiler for Perl"

I found your quiz to be a pretty frustrating experience; partly because
you talk down to the newbies and those who can't follow your reasoning,
but mainly because the end data structure is so unsatisfying. A much better
quiz was posted a few weeks back by the oft-maligned love-him-or-adore-him
Tom Christiansen.

> the original code was this and i asked what good is it?
> 
> @array = qw( a b c d ) ;
> 
> @array{ @array } = ( [ @array ] ) x @array ;

What good is it? I'm still asking myself that very same question.
 
> there is a very useful perl idiom here which all good perl hackers
> should have in their vocabulary. it is called hash slices and it has
> many different uses which i will illustrate. it is a rare perl script
> (which is not trivially small) that couldn't use hash slices to improve its
> efficiency, clarity and elegance.

Yes; it's an idiom, but it only does one thing; it's shorthand for
your semantically equivalent version. It's no more wondrous and no more
useful than array slices. To say that it's rare that non-trivial Perl
scripts could not be improved with hash slices exaggerates both the
usefulness of hash slices and your knowledge of useful Perl scripts.

> the fundamental hash slice expression is:
> 
> @hash{ @array } = ( list ) ;
> 
> this is semantically equivilent to:
> 
> ( $hash{ $array[0] }, ... $hash{ $array[$#array]  } ) = ( list ) ;
> 
> that means you are doing an array assignment to a list of entries in the
> hash. each entry is indexed by the next array value and is assigned
> corresponding value in the list. the list as always can be any
> combination of list values and arrays.

Here's a winning explanation that shows the hash slice syntax in action:
Perl book writers take note. :) You'll have to do something like
s/get/reference/g; however.

================================================================
EXAMPLE:

To get one element of a hash, use $hash{keyval}
	$ENV{TERM}='vt100';

To get many elements of an array, use a hash splice: @hash{@keyvals}
	@envvars = ('TERM','TZ');
	$ENV{@envvars}=('vt100','Australia/NSW');

	or, using a list as the splice,
	@ENV{'TERM','TZ'}=('vt100','Australia/NSW'); 

This is equivalent to:
	$ENV{TERM} = 'vt100';
	$ENV{TZ} = 'Australia/NSW';

Compare the array slice:
	($uid, $gid) = (stat("/users/control"))[4,5];

To get the whole hash, use %hash
	undef %ENV;
	%ENV = %SECURE_ENV;
================================================================
 
> the hash slice can be indexed by a list instead of an array but i
> haven't found it to be as useful (though it is used sometimes) so i
> won't go into it here.

@ENV{'TERM','TZ'}=('vt100','Australia/NSW'); 
But not that useful. It's just a shorthand. Which is all that hash slices are,
at the end of the day.
 
> NEWBIE NOTE:
Can't get enough of these Newbie Notes!

> remember that the @ means an array context but it is the {} after the
> variable name that marks it as a hash. many newbies fall for this trap.
The @ is forcing array context of what's inside {}; interesingly enough.

> hashes use {} and arrays use []. when indexing hashes or arrays,
> the prefix char is used ONLY to mark context, not data type.
Well put.
 
> Q: what are the interesting ways of assigning to a hash slice?
A: $hash{@keyvals} = @values; 
[snip snip snip snip]
> another very common hash slice idiom i use all the time is testing if a
> string is in a given list of strings.  we actually don't care about the
> values in the hash but i use 1 for clarity and to skip the need for
> exists (though exists might be faster. i have never benchmarked it. i
> leave that as an assignment for the reader).
exercise for the reader, Uri, "exercise".
 
> the assignment uses an interesting operator that most newbies never have
> seen. it is called the repetition operator and it is just the plain
> letter 'x'. 
oh, so *that's* the x operator. Didn't know it from a bar of soap.
No wonder my sums kept coming out wrong.

> NEWBIE NOTE:
> notice the selection of names for each of the hashes, %foo_to_bar,
> %is_a_foo, $foo_to_index. they are very descriptive of the operation
> they perform. in fact i treat them as very fast and simple
> subroutines. indexing into a hash is a transformation of the key values
> (arguments) to the output values (results). thinking this way will make
> your perl scripts much easier to design and write.
No, no, no, no, no, no. This won't do at all.
Don't think of hashes as subroutines, folks!
A hash is an unordered collection of things indexed by string.
It's very useful for hash tables (hence "hash"), symbol tables and simple
databases.
An array is an ordered collection of things indexed by number.
A subroutine is something else altogether. 

> now let us look at the original quiz version of the hash slice idiom.

> @array{ @array } = ( [ @array ] ) x @array ;
[snip]
> hash %array looks like this:
> 
> %array = (
> 	'a' => [ 'a', 'b', 'c', 'd' ],	
> 	'b' => [ 'a', 'b', 'c', 'd' ],	
> 	'c' => [ 'a', 'b', 'c', 'd' ],	
> 	'd' => [ 'a', 'b', 'c', 'd' ],	
> ) ;
> 
> except that all the anonymous arrays are the same one (the above code
> creates 4 different anonymous arrays with the same values).
> 
> what good is this structure?

The only question this structure answers is this:

Question: "Given a unique value; belonging to a hash;
	   what are all the values in that hash?"

> well i was thinking about alias expansion when i devised this. what if
> you had a set of aliases and you wanted to expand any one of them to the
> full list. this data structure will do that. enter any of the single
> elements and you get the entire list. by itself it isn't much but what
> if you had multiple sets of aliases? you could do this:

> @foo_list = qw( a b c d ) ;
> @bar_list = qw( j k l m n o ) ;
> @baz_list = qw( w x ) ;
> 
> @expand_aliases{ @foo_list } = ( [ @foo_list ] ) x @foo_list ;
> @expand_aliases{ @bar_list } = ( [ @bar_list ] ) x @bar_list ;
> @expand_aliases{ @baz_list } = ( [ @baz_list ] ) x @baz_list ;

So it's not "I touch myself" by the Divynyls. Sorry.

New Question: "Given a unique value; belonging to one of several hashes;
	   to which hash does it belong and what all the values in that hash?"
 
> now if you had a single token of unknown type you could get its alias
> list in one step:
> 
> @aliases = @{ $expand_aliases{ $alias } } ;
> 
> or you could build up a list of aliases with this:
> 
> foreach $alias ( @in_aliases ) {
> 	push( @out_aliases, @{ $expand_aliases{ $alias } } ) ;
> }
> 
> 
> NEWBIE NOTE:
> the surrounding @{} is used to dereference the stored anonymous list
> back into a list for assignment to @aliases.
Because the data structure is complex; so is the dereferencing.

I'd do it differently; have an extra hash on top, telling you which
hash the unique elements belonged to; eg $master{a}='foo_list';
You can then use eval to get you all the elements of %foo_list.

> this is only one way of using this idiom. try to think of others as an
> exercise and report them back to me.
All it does is: for a given element; tells you all the other elements in that
hash. Might be useful in Set Theory or something. 1:1 mappings in Functional
Analysis. I give up. 

> lesson is over (for now).
Watch this space. 

Stuart Cooper
stuartc@ind.tansu.com.au


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

Date: 04 Mar 1998 07:03:44 -0700
From: Randal Schwartz <merlyn@stonehenge.com>
To: bill@astro.fccj.cc.fl.us
Subject: Re: QUIZ: answer and hash slice tutorial
Message-Id: <8c4t1e8se7.fsf@gadget.cscaper.com>

>>>>> "Bill" == Bill Jones <webmaster@fccjmail.fccj.cc.fl.us> writes:

Bill> Hmmm.  Since Perl was originally targeted to C programmers, maybe
Bill> a start at the beginning would prove helpful for a 'beginners Quiz?'

Bill> Something like -
Bill> my($removeHostAddr) = substr(remote_addr, (rindex(remote_addr(),".")));

Bill> Q1.  What do you (ng readers not Uri, per se) think it does?

The same thing as

	my($removeHostAddr) = remote_addr() =~ /.*(\..*)/;

As in, grab the last part of the return value of &remote_addr (which
you invoke twice :-) beginning with the final ".".  (Did you really
want the dot in your value?)

Bill> Q2.  How would that be written as a RegEx???

Like I just did. :-)

print "Just another Perl hacker," # but not what the media calls "hacker!" :-)
## legal fund: $20,990.69 collected, $186,159.85 spent; just 181 more days
## before I go to *prison* for 90 days; email fund@stonehenge.com for details

-- 
Name: Randal L. Schwartz / Stonehenge Consulting Services (503)777-0095
Keywords: Perl training, UNIX[tm] consulting, video production, skiing, flying
Email: <merlyn@stonehenge.com> Snail: (Call) PGP-Key: (finger merlyn@teleport.com)
Web: <A HREF="http://www.stonehenge.com/merlyn/">My Home Page!</A>
Quote: "I'm telling you, if I could have five lines in my .sig, I would!" -- me


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

Date: Wed, 4 Mar 1998 14:16:13 GMT
From: aml@world.std.com (Andrew M. Langmead)
Subject: Re: QUIZ: answer and hash slice tutorial
Message-Id: <EpAsz1.9uo@world.std.com>

Uri Guttman <uri@sysarch.com> writes:

>for 0 based use:

>@foo_to_index{ @foo_array } = ( 0 .. $#foo_array ) ;

>for 1 based use:

>@foo_to_index{ @foo_array } = ( 1 .. @foo_array ) ;


If you are going to worry whether $[ has been altered from its
default, why not just use it explicitly:

@foo_to_index{ @foo_array } = ( $[ .. $#foo_array ) ;

-- 
Andrew Langmead


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

Date: Wed, 4 Mar 1998 08:27:12 -0600
From: An Thi-Nguyen Le <anle@ehsn6.ews.uiuc.edu>
Subject: Structure of Perl data types?
Message-Id: <Pine.GSO.3.96.980304082534.20416G-100000@ehsn6.ews.uiuc.edu>


Mmm, maybe this is a silly question.

Perl arrays are special, it seems.  You can use them as arrays, but you
can slice them, dice them, grow them, shrink them--like lists.  What are
Perl arrays made of?


Sugar, spice, 'n everything nice
____________________________________________________________________________
An Thi-Nguyen Le                                          aa
Liberal Arts and Sciences                                {''}--.
http://www.students.uiuc.edu/~anle/HOMEPAGE               oo____'.
================================================================||==========
                                                                j/




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

Date: 4 Mar 1998 14:53:49 GMT
From: Tom Christiansen <tchrist@mox.perl.com>
Subject: Re: Structure of Perl data types?
Message-Id: <6djptt$km7$2@csnews.cs.colorado.edu>

 [courtesy cc of this posting sent to cited author via email]

In comp.lang.perl.misc, 
    An Thi-Nguyen Le <anle@ehsn6.ews.uiuc.edu> writes:
:Mmm, maybe this is a silly question.

Somewhat.  USE THE SOURCE, LUKE.

:Perl arrays are special, it seems.  You can use them as arrays, but you
:can slice them, dice them, grow them, shrink them--like lists.  What are
:Perl arrays made of?

Dynamic arrays.  Read /usr/src/perl/av.c and /usr/src/perl/av.c for details.

--tom
-- 
	Tom Christiansen	tchrist@jhereg.perl.com


    "Even egotists are allowed to have opinions." --Larry Wall


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

Date: 04 Mar 1998 06:55:43 -0700
From: Randal Schwartz <merlyn@stonehenge.com>
To: Uri Guttman <uri@sysarch.com>
Subject: Re: Summing Up Array Values - How Do I?
Message-Id: <8cd8g28srk.fsf@gadget.cscaper.com>

>>>>> "Uri" == Uri Guttman <uri@sysarch.com> writes:

Uri> let's go schwartzian on the newbie!

Argh!  Taking my name in vain! :-)

Uri> @yards = (2,3);
Uri> $sum = 0 ;
Uri> map { $sum += $_ } @yards ;

Double Argh!  map in void context! evil! evil! evil alert!

Uri> print $sum ;

For a truly disgusting use of map, how about this?

    $sum = eval join "+" map "\$yards[$_]", 0..$#yards;

There.

print "Just another Perl hacker," # but not what the media calls "hacker!" :-)
## legal fund: $20,990.69 collected, $186,159.85 spent; just 181 more days
## before I go to *prison* for 90 days; email fund@stonehenge.com for details

-- 
Name: Randal L. Schwartz / Stonehenge Consulting Services (503)777-0095
Keywords: Perl training, UNIX[tm] consulting, video production, skiing, flying
Email: <merlyn@stonehenge.com> Snail: (Call) PGP-Key: (finger merlyn@teleport.com)
Web: <A HREF="http://www.stonehenge.com/merlyn/">My Home Page!</A>
Quote: "I'm telling you, if I could have five lines in my .sig, I would!" -- me


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

Date: 04 Mar 1998 06:57:05 -0700
From: Randal Schwartz <merlyn@stonehenge.com>
To: Uri Guttman <uri@sysarch.com>
Subject: Re: Summing Up Array Values - How Do I?
Message-Id: <8c90qq8spa.fsf@gadget.cscaper.com>

>>>>> "Uri" == Uri Guttman <uri@sysarch.com> writes:

Uri> cberry@cinenet.net (Craig Berry) writes:
>> Uri Guttman (uri@sysarch.com) wrote:
>> : let's go schwartzian on the newbie!
>> : 
>> : @yards = (2,3);
>> : $sum = 0 ;
>> : map { $sum += $_ } @yards ;
>> 
>> Thou shalt not use map in a void context! :) The foreach form is clearer
>> and more efficient: 

Uri> i agree. i was just showing another way to do it, schwartzian style.

No.  The "Schwartzian Transform" is specifically a cached-key sort
identified by a map-sort-map combination.

It has nothing to do with using map in general in clever (or silly) ways.

print "Just another Perl hacker," # but not what the media calls "hacker!" :-)
## legal fund: $20,990.69 collected, $186,159.85 spent; just 181 more days
## before I go to *prison* for 90 days; email fund@stonehenge.com for details

-- 
Name: Randal L. Schwartz / Stonehenge Consulting Services (503)777-0095
Keywords: Perl training, UNIX[tm] consulting, video production, skiing, flying
Email: <merlyn@stonehenge.com> Snail: (Call) PGP-Key: (finger merlyn@teleport.com)
Web: <A HREF="http://www.stonehenge.com/merlyn/">My Home Page!</A>
Quote: "I'm telling you, if I could have five lines in my .sig, I would!" -- me


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

Date: 4 Mar 1998 12:29:15 GMT
From: Tom Christiansen <tchrist@mox.perl.com>
Subject: Re: The -w switch (was Re: better way to do this?)
Message-Id: <6djher$b63$1@csnews.cs.colorado.edu>

 [courtesy cc of this posting sent to cited author via email]

In comp.lang.perl.misc, Zenin <zenin@best.com> writes:
:  There is the option of sending it to the browser.  This is great for
:  development, but a security hole for production my clients (nor I)
:  would allow, 

I can see that you and I have very different notions of security.
:
:  Nuke -w from production code if it has a hint of chance to break it
:  when perl is upgraded.  

Adding a warning is not "breaking" anything.  It's helping you.

And if your brain-damaged web server screws up on this:

    #!/usr/bin/perl
    print STDERR "Hello?\n";
    print STDOUT "Content-type: text/plain\n\n";
    print STDOUT "This was a test\n";

Then you need to upgrade to one that doesn't give a flying fart
what comes out STDERR before STDOUT.  I suggest Apache.

--tom
-- 
	Tom Christiansen	tchrist@jhereg.perl.com

I hope to get Perl 5 out this summer, for certain values of summer.
        -- <1993Jun5.052825.3897@netlabs.com>


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

Date: 4 Mar 1998 12:42:19 GMT
From: Zenin <zenin@best.com>
Subject: Re: The -w switch (was Re: better way to do this?)
Message-Id: <889015679.826590@thrush.omix.com>

Lars Gregersen <lg@kt.dtu.dk> wrote:
	>snip<

	When you send a followup to email as well please make a note about
	it, thanks...

: and how exactly are you going to find out if the change is something
: that you have to worry about when you do not see the warnings?

	To date, none have been anything to worry about.  They are almost
	all new warnings for conditions that already existed such as my()ing
	a variable two times within the same scope.

: Besides
: putting in new warnings to assist an existing Perl version the
: warnings could be a result of new features and/or bugs that you might
: want to know about

	Like I said, they haven't been to date.  If there is a new bug, I
	doubt there is going to be a warning for it.  If it's a new feature
	that sparked the warning (vary, vary unlikely at this point in
	perl's life), I'd kick whoever broke reverse compatibility by
	adding it.

: - not to mention undetected bugs in your code.

	If there is an undetected bug in the code, and the code still works
	despite it, it's not a bug.  If the code had been working and
	continues to work despite any new "features", the spiting out of
	a new warning for an existing "possible problem" is not needed nore
	wanted.

: This is especially important in CGI code.

	Because it differs from other programs how, exactly?

-- 
-Zenin
 zenin@best.com


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

Date: 4 Mar 1998 14:06:22 GMT
From: Zenin <zenin@best.com>
Subject: Re: The -w switch (was Re: better way to do this?)
Message-Id: <889020722.613489@thrush.omix.com>

Tom Christiansen <tchrist@mox.perl.com> wrote:
	>snip<
: I can see that you and I have very different notions of security.

	If something throws an exception that goes uncaught and ends
	up in a user's browser window, it could have dangerous information.
	If it's a full stack trace (how I write most of my exceptions) then
	it's likely to have the arguments that were passed.  Such
	information could be database username/password, or the like. 
	Information I'd rather not have viable, thanks.  This isn't an
	issue to use or not use -w, it is an issue to use the CGI::Carp
	"fatalsToBrowser" option.  If something goes vary wrong, I'd like
	the information formated nicely in my error log (thus the use of
	CGI::Carp) but not at all in the user's window.

: Adding a warning is not "breaking" anything.  It's helping you.
: And if your brain-damaged web server screws up on this:
	>snip<
: Then you need to upgrade to one that doesn't give a flying fart
: what comes out STDERR before STDOUT.  I suggest Apache.

	I suggest Apache as well, however I often have to use whatever
	the client uses.  Netscape among others had such problems in the
	past, although I haven't had time (or cared enough) to test the
	latest versions.

-- 
-Zenin
 zenin@best.com


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

Date: 4 Mar 1998 14:51:34 GMT
From: Tom Christiansen <tchrist@mox.perl.com>
Subject: Re: The -w switch (was Re: better way to do this?)
Message-Id: <6djppm$km7$1@csnews.cs.colorado.edu>

 [courtesy cc of this posting sent to cited author via email]

In comp.lang.perl.misc, Zenin <zenin@best.com> writes more
:	I suggest Apache as well, however I often have to use whatever
:	the client uses.  

I am *really* tired of reading "the client made me do it" whinings.

Does nothing but money matter?  What happened to technical training?
Has it fallen prey to money-grubbing lackeys without honor or standards?
Why do you take jobs in brain-dead environments?  Do you just not care,
or are you that desperate?  

A surgeon who's told by his client that he must cure a minor headache
by operating using dirty stone tools has the obligation to explain that
this is a stupid idea from the start to the finish.

To the professional, the customer is *not* always right.  It is your
duty to provide sound technical advice.   Why do programming slaves
just say "Yes, Master, whatever you say, Master" to their managers or
clients or whatnot?  Why can't technical training count for anything?
Where have professional integrity and standards gone?

Maybe some people like being mindless slaves, but it's a terrible life.

--tom
-- 
	Tom Christiansen	tchrist@jhereg.perl.com
    When in doubt, parenthesize.  At the very least it will let some
    poor schmuck bounce on the % key in vi.
            --Larry Wall in the perl man page 


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

Date: Wed, 04 Mar 1998 12:52:37 GMT
From: toriw@online.no (Tor Iver Wilhelmsen)
Subject: Re: What is PERL? Learn JAVA instead?
Message-Id: <35174bf3.17596556@news.eunet.no>

On 4 Mar 1998 07:53:15 GMT, c.c.eiftj@03.usenet.us.com (Rahul Dhesi)
uttered:

>Perl runs just about everywhere.  Java doesn't run even on Sun's own
>SunOS operating system.

Nor did Perl, until someone ported it. The Kaffe VM, IIRC, runs on
SunOS 4.

Perl is sufficiently old to have a broad user base and several ports -
Java has the disadvantage that their originators won't make VMs for
other architectures, but leaves that to others. I'll bet Larry didn't
port Perl to all those other architectures himself, either. :-)

-- 
"Between our dreams and actions lies this world."
   - Bruce Springsteen, "Dead Man Walking"
Tor Iver Wilhelmsen       toriw@online.no


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

Date: Wed, 04 Mar 1998 12:52:39 GMT
From: toriw@online.no (Tor Iver Wilhelmsen)
Subject: Re: What is PERL? Learn JAVA instead?
Message-Id: <35184c99.17762683@news.eunet.no>

On 4 Mar 1998 01:33:28 GMT, abigail@fnx.com (Abigail) uttered:

>Java is proprietary, Perl is open.

Bollocks. Java is openly speced, but the name is proprietary, and
Sun's particular implementation is proprietary. Perl is openly
sourced, and I cannot find anything about limitations on the name.

I use both, and other languages for that matter, depending on the
task. It must be boring to only know one language... :-)

(insert "Hello World")

"Hello World" -> putstring

-- 
"Between our dreams and actions lies this world."
   - Bruce Springsteen, "Dead Man Walking"
Tor Iver Wilhelmsen       toriw@online.no


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

Date: 4 Mar 1998 14:13:35 GMT
From: scott@softbase.com
Subject: Re: What is PERL? Learn JAVA instead?
Message-Id: <6djnif$rno$6@scully.new-era.net>

Abigail (abigail@fnx.com) wrote:

> Perl and Python are probably more suitable for cross platform programs
> than Java.

The biggest plus Perl has going for it is the *source* is transportable
across platforms. Therefore, if a program doesn't run, you have the
source and can make it run. Java is the opposite: you have bytecodes
and are basically SOL unless you have the source too and can recompile
it. Perl's strength is the just-in-time compile.

(I guess that's why I have always wondered what the point behind the
Perl -> Java-runtime compiler is. It seems to give up the best features
of Perl.)

Scott
--
Look at Softbase Systems' client/server tools, www.softbase.com
Check out the Essential 97 package for Windows 95 www.skwc.com/essent
All my other cool web pages are available from that site too!
My demo tape, artwork, poetry, The Windows 95 Book FAQ, and more. 


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

Date: 8 Mar 97 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin) 
Subject: Digest Administrivia (Last modified: 8 Mar 97)
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.  

To submit articles to comp.lang.perl.misc (and this Digest), send your
article to perl-users@ruby.oce.orst.edu.

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.

The Meta-FAQ, an article containing information about the FAQ, is
available by requesting "send perl-users meta-faq". The real FAQ, as it
appeared last in the newsgroup, can be retrieved with the request "send
perl-users FAQ". Due to their sizes, neither the Meta-FAQ nor the FAQ
are included in the digest.

The "mini-FAQ", which is an updated version of the Meta-FAQ, is
available by requesting "send perl-users mini-faq". It appears twice
weekly in the group, but is not distributed in the digest.

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 V8 Issue 2019
**************************************

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