[7712] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 1338 Volume: 8

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Tue Nov 18 14:37:23 1997

Date: Tue, 18 Nov 97 11:00:45 -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           Tue, 18 Nov 1997     Volume: 8 Number: 1338

Today's topics:
     Re: An elegant solution wanted for removing .. in path (Tad McClellan)
     Re: An elegant solution wanted for removing .. in path (Tad McClellan)
     Re: An elegant solution wanted for removing .. in path <shimpei@socrates.caltech.edu>
     Re: An elegant solution wanted for removing .. in path (Tushar Samant)
     Re: An elegant solution wanted for removing .. in path <shimpei@socrates.caltech.edu>
     Re: Better Way in Perl <rjk@coos.dartmouth.edu>
     Re: Bizarre Errors! (Tad McClellan)
     Re: Building a "...special verions of perl." <doug@tc.net>
     Re: calendar code (Steffen Beyer)
     Re: compiler-a3: problem with setuid perl program (Malcolm Beattie)
     Re: Creating a call tree pverdret@sonovision-itep.fr
     Re: Debugging CGI programs (Bart Lateur)
     Re: eval and scoping problem <lucs@cam.org>
     Re: exclusive file rights <jamesr@aethos.co.uk>
     Re: how do i append todays date to the end of a filenam (Steffen Beyer)
     Re: How to determine absolute file path on UNIX <usenet-tag@qz.little-neck.ny.us>
     how to reference index into array by it's value ()
     Is there a way to pass file handles to another process? <arnej@fc.hp.com>
     Looking for flat database modules... (John Robson)
     modules, ignoring Tom Phoenix (Darwin O.V. Alonso)
     Re: modules, ignoring Tom Phoenix (Tom Grydeland)
     Re: perl conversion of curly quotes out of web form <chris_braiotta@harvard.edu>
     Problem installing Perl 5.004_04 - miniperl.o <mshannon@lds.com>
     Q: will perlis.dll work w/5.004_02 dist from Gurusamy S <jemmerli@cscmail.csc.com>
     Re: sequence point? (Tad McClellan)
     Re: sequence point? <bnelson@netcom.com>
     Spell check dictionary where? thomas@y4.com
     Re: Spell check dictionary where? (Jeremy D. Zawodny)
     Re: split problems (Andrew M. Langmead)
     Re: split problems (Terry Michael Fletcher - PCD ~)
     Re: Win32 Perl and NT IIS (Brian Jepson)
     Digest Administrivia (Last modified: 8 Mar 97) (Perl-Users-Digest Admin)

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

Date: Tue, 18 Nov 1997 07:40:21 -0600
From: tadmc@flash.net (Tad McClellan)
Subject: Re: An elegant solution wanted for removing .. in path
Message-Id: <5s5s46.lo.ln@localhost>

Shimpei Yamashita (shimpei@socrates.caltech.edu) wrote:
: I was writing a perl script last night that required me to change a
: pathname like

: /usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/

: into its canonical (and human readable) form of

: /usr/local/lib/perl5/5.004_04/i586_linux/

: I have thought about this for a while, and while it is not hard to
: come up with solutions, the only solutions I have found so far are
: incredibly ugly (split by / into an array, reconstruct path one
: directory at a time)--not any more elegant than what I would write in
: C. But this is perl, and this is a very simple problem for a human
: being to do mechanically at sight, and I'm sure there is a one-liner
: solution just waiting for me somewhere.

: Any suggestions?


   1 while s#/[^/]+/\.\./#/#;


--
    Tad McClellan                          SGML Consulting
    tadmc@flash.net                        Perl programming
    Fort Worth, Texas


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

Date: Tue, 18 Nov 1997 07:44:51 -0600
From: tadmc@flash.net (Tad McClellan)
Subject: Re: An elegant solution wanted for removing .. in path
Message-Id: <j46s46.lo.ln@localhost>

Richard Caley (rjc@liddell.cstr.ed.ac.uk) wrote:
: In article <64s274$6rt@gap.cco.caltech.edu>, Shimpei Yamashita (sy) writes:
: sy> /usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/
: sy> into its canonical (and human readable) form of
: sy> /usr/local/lib/perl5/5.004_04/i586_linux/

: Er, am I missing something? ...


I think so.

It won't work if the 'blah/..' does not happen to fall between
'usr' and 'local' (ie. It works for only the one case given, not
for the general case)

: 	$filename =~ s%^(/usr)/.*(/local/.*?)%$1$2%;


Fails for:

$_ = "/usr/blah/blah/blah/blah/../../../../someplace/lib/perl5/5.004_04/i586_linux/\n";

$_ = "/usr/blah/blah/blah/blah/../../../../local/blah/../lib/perl5/5.004_04/i586_linux/\n";


--
    Tad McClellan                          SGML Consulting
    tadmc@flash.net                        Perl programming
    Fort Worth, Texas


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

Date: 18 Nov 1997 18:08:10 GMT
From: Shimpei Yamashita <shimpei@socrates.caltech.edu>
Subject: Re: An elegant solution wanted for removing .. in path
Message-Id: <64slia$l5m@gap.cco.caltech.edu>

Marek Rouchal <Marek.Rouchal@-nospam-hl.siemens.de> writes:
>
>In article <slrn6736lt.a6d.gabor@vinyl.quickweb.com>,
>gabor@vinyl.quickweb.com (Gabor) writes:
>> In article <64s274$6rt@gap.cco.caltech.edu>, Shimpei Yamashita wrote:
>> >I was writing a perl script last night that required me to change a
>> >pathname like
>> >
>> >/usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/
>> >
>> >into its canonical (and human readable) form of
>> >
>> >/usr/local/lib/perl5/5.004_04/i586_linux/
>> >
>
>>
>$_='/usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/';
>> 1 while s(\w+/\.\./)();
>> print $_,"\n";
>
>This works nicely, but only if there are no symbolic links involved in the
>'blah' directories. Imagine
>
>/usr/blah points to /usr/foo/foo/foo
>
>then /usr/blah/../../../local/lib/perl5/and_so_on
>
>is in fact /usr/local/lib/perl5/and_so_on
>
>So a 'proper' resolution script would have to either
>
>1. check every subdir for symbolic links or
>2. use the shell (which isn't the perl way, I know) :
>
>$_='/usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/';
>
>$dir = $_;
>$dir =~ s#/[^/+]/?$## unless(-d $d); # strip filename
>
>$resolved_dir = `cd $dir; pwd`;

Tsk, tsk. Where in my original problem did I say that the path
actually exists on the computer it's running on? In the script I'm
writing, $_ is the destination of a symbolic link, and there is no
guarantee that the symbolic link isn't pointing to la-la land. This
is why I was asking for a solution that didn't hit the filesystem.

-- 
Shimpei Yamashita               <http://www.patnet.caltech.edu/%7Eshimpei/>


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

Date: 18 Nov 1997 12:28:38 -0600
From: scribble@shoga.wwa.com (Tushar Samant)
Subject: Re: An elegant solution wanted for removing .. in path
Message-Id: <64smom$9a3@shoga.wwa.com>

tadmc@flash.net writes:
>Shimpei Yamashita (shimpei@socrates.caltech.edu) wrote:
>: I was writing a perl script last night that required me to change a
>: pathname like
>
>: /usr/blah/blah/blah/blah/../../../../local/lib/perl5/5.004_04/i586_linux/
>
>: into its canonical (and human readable) form of
>
>: /usr/local/lib/perl5/5.004_04/i586_linux/

[...]

>   1 while s#/[^/]+/\.\./#/#;

CORRECT. As opposed to: WRONG, which most other suggested solutions are.
Getting it wrong on a tricky point is one thing -- not even reading the
problem is another. The thing is all posts look equally authoritative...

I'd say be all-out defensive and do:

	s#/+#/#g; $_ = "/$_/";       #"sentinels"

	1 while s#/[^/]+/\.\./#/#;

	chop($_ = substr($_,1));     #or something like that



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

Date: 18 Nov 1997 18:31:12 GMT
From: Shimpei Yamashita <shimpei@socrates.caltech.edu>
Subject: Re: An elegant solution wanted for removing .. in path
Message-Id: <64smtg$l5m@gap.cco.caltech.edu>

Lloyd Zusman <ljz@asfast.com> writes:
>Here's one possible starting point for a general solution which doesn't
>hit the file system (as per the original request):
>
>  while ($path =~ s%[^/]+/\.\./%%) {}
>  $path =~ s%/\./%/%g;
>  $path =~ s%//+%/%g;
>  $path =~ s%^\./%%;
>
>This also handles paths like this:
>
>  /this/is/./a/sample/path
>
>And this:
>
>  /this/is/another///////sample/path
>
>And this:
>
>  ./this/is/yet/another
>
>However, it isn't a one-liner, and I don't recall if the original
>poster requested one.

I was wondering if there was one, but it doesn't have to be one.  If
you're trying to handle relative paths (which I didn't meant to ask
for, but I guess it is an interesting addition to the problem), your
regexp won't work with "../../bin/../../lib", which it incorrectly
resolves to ../lib. It does seem to work fine with absolute paths,
except that it doesn't handle leading /../ correctly--but all you need
to fix that is $path =~ s%^/(\.\./)+%/% .

-- 
Shimpei Yamashita               <http://www.patnet.caltech.edu/%7Eshimpei/>


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

Date: Tue, 18 Nov 1997 00:54:24 -0500
From: Chipmunk <rjk@coos.dartmouth.edu>
Subject: Re: Better Way in Perl
Message-Id: <34712D8F.7E7@coos.dartmouth.edu>

brian d foy wrote:
> 
> In article <34639803.A2960A9F@ei.kodak.com>, Walker Curtis <curtis@ei.kodak.com> wrote:
> 
> >I involved myself in a spirited competition to come up
> >with the shortest one liner that could be run from the
> >average tcsh,csh,ksh and sh shell.
> 
> >The current best here is a 41 character perl hack that I came up with.
> >
> >perl -e 'for(<*>){`mv $_ $\``if/\.cin$/}'
> 
> >Does someone know of a short way, white space counts.
> >
> >If someone has a real phenomenal answer, I'll send you a t-shirt.
> 
> % a
> 
> if you can use sed or perl, i can write a program called "a" to do it.
> one letter from the command line. :)

Next time read the *whole* message:

> There are also no aliases, custom programs, etc... being used.

And you thought you were so clever!

Chipmunk


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

Date: Tue, 18 Nov 1997 08:10:35 -0600
From: tadmc@flash.net (Tad McClellan)
Subject: Re: Bizarre Errors!
Message-Id: <rk7s46.nu.ln@localhost>

Andrew Ellerton (andrewe@technologyXchange.com) wrote:

: I get the following errors in the initial stages of running a script:


The 'perldiag' man page is shipped with every proper perl distribution.

It describes the messages that perl might issue.

You should look them up there if you want a description of them  ;-)


: Use of "$$<digit>" to mean "${$}<digit>" is deprecated at
: /home/web/users/xchange/lib/Interface.pm line 2590.

----------------
=item Use of "$$<digit>" to mean "${$}<digit>" is deprecated

(D) Perl versions before 5.004 misinterpreted any type marker followed
by "$" and a digit.  For example, "$$0" was incorrectly taken to mean
"${$}0" instead of "${$0}".  This bug is (mostly) fixed in Perl 5.004.

However, the developers of Perl 5.004 could not fix this bug completely,
because at least two widely-used modules depend on the old meaning of
"$$0" in a string.  So Perl 5.004 still interprets "$$<digit>" in the
old (broken) way inside strings; but it generates this message as a
warning.  And in Perl 5.005, this special treatment will cease.
----------------


: Value of <HANDLE> construct can be "0"; test with defined() at
: /home/web/users/xchange/lib/ITX/Member.pm line 65535.


----------------
=item Value of %s can be "0"; test with defined()

(W) In a conditional expression, you used <HANDLE>, <*> (glob), C<each()>,
or C<readdir()> as a boolean value.  Each of these constructs can return a
value of "0"; that would make the conditional expression false, which is
probably not what you intended.  When using these constructs in conditional
expressions, test their values with the C<defined> operator.
----------------


: The problem is that both of those modules are far far shorter than the
: lines specified! I've even grepped for a "digit" and can't find mention

   grep '$$[0-9]' Interface.pm               # find first one

   perl -ne 'print if /=\s*</' Interface.pm  # find second one (maybe)


: of it anywhere, let alone the same file! 


--
    Tad McClellan                          SGML Consulting
    tadmc@flash.net                        Perl programming
    Fort Worth, Texas


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

Date: 18 Nov 1997 13:02:04 -0500
From: Douglas McNaught <doug@tc.net>
Subject: Re: Building a "...special verions of perl."
Message-Id: <m2aff213oj.fsf@ono.tc.net>

Ben Fogarty <bfogarty@ford.com> writes:

> Our skilled and fearless developer provided the means of
> building "...your own special copy of perl." with c
> subroutines linked into same. I have recently taken over
> a position with my company where I have inherited such a
> special version of perl that has some c routines as a part
> of the build. The old copy of perl was 4.36 and I have been
> upgrading all copies on the systems in the network to
> 5.004. I have finally come to the point where I have to
> deal with the special version with the c subroutines built
> in.

Perl 5 provides a very clean mechanism for doing this, called XS.  It
is documented in the 'perlxs', 'perlxstut' and 'perlguts' manpages.
If you have dynamic loading enabled (the default for most platforms)
users can link in and run custom extensions to Perl with simply a
'use' statement.  This is how the POSIX and Socket modules (among
others) that come with Perl do their magic.  I would suggest you help
your users migrate to the XS mechanism rather than trying to retrofit
their custom code into a new Perl architecture that has changed
substantially since the days of 4.036.  Less headaches for you and for 
them.

-Doug
-- 
sub g{my$i=index$t,$_[0];($i%5,int$i/5)}sub h{substr$t,5*$_[1]+$_[0],1}sub n{(
$_[0]+4)%5}$t='encryptabdfghjklmoqsuvwxz';$c='fxmdwbcmagnyubnyquohyhny';while(
$c=~s/(.)(.)//){($w,$x)=g$1;($y,$z)=g$2;$w==$y&&($p.=h($w,n$x).h($y,n$z))or$x==
$z&&($p.=h(n$w,$x).h(n$y,$z))or($p.=h($y,$x).h($w,$z))}$p=~y/x/ /;print$p,"\n";


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

Date: 18 Nov 1997 17:28:19 GMT
From: sb@en.muc.de (Steffen Beyer)
Subject: Re: calendar code
Message-Id: <64sj7j$sc7$2@en1.engelschall.com>

Todd Wallace <twallace@zippy.icma.org> wrote:
> Can someone point me to some calendar code in Perl?
> I need something that does something like the "cal" command in UNIX.

> Todd Wallace

Get the module "Date::DateCalc". It contains a library with a "calendar"
subroutine that does the same as the UNIX "cal" command.

Sample:

%> perl -e 'use Date::DateCalcLib qw(calendar); print calendar(1997,11);'
       November 1997
Mon Tue Wed Thu Fri Sat Sun
                      1   2
  3   4   5   6   7   8   9
 10  11  12  13  14  15  16
 17  18  19  20  21  22  23
 24  25  26  27  28  29  30
%>

The module is available from http://www.engelschall.com/u/sb/download/
or from any CPAN ftp server.

Hope this helps.

Yours,
-- 
    Steffen Beyer <sb@sdm.de> http://www.engelschall.com/u/sb/
     "There is enough for the need of everyone in this world,
      but not for the greed of everyone." - Mahatma Gandhi
   >> Unsolicited commercial email goes directly to /dev/null <<


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

Date: 18 Nov 1997 16:15:21 GMT
From: mbeattie@sable.ox.ac.uk (Malcolm Beattie)
Subject: Re: compiler-a3: problem with setuid perl program
Message-Id: <64seup$mc4$1@news.ox.ac.uk>

In article <64rgql$q7h$1@unix2.glink.net.hk>,
Yiu Kin Ho <khyiu@glink.net.hk> wrote:
>Hi,
>        I have a program orginally written by perl.  Recently, we try to
>compile this perl program.  The program need to setuid with the permission
>--s--x--x.  The compilation is success.  However, when we chmod the same
>permission mode with the compiled program, it appear with the error:
>
>No -e allowed in setuid scripts
>
>We don't have any -e option in my perl program.
>
>Any idea? Thanks....

Not enough of perl's internals are exposed to the external compiler
kit to allow it to start up a program nicely without parsing it. The
best it can do is fake up arguments "-e ''" so that perl will parse
the blank program ''. Unfortunately, -e triggers the check done by
perl when it's doing its suid stuff. The compiler will be more
closely integrated with the core for 5.005 and, time permitting, I
might be able to clean things up somewhat so that the "-e ''" kludge
is no longer necessary.

--Malcolm

-- 
Malcolm Beattie <mbeattie@sable.ox.ac.uk>
Oxford University Computing Services
"I permitted that as a demonstration of futility" --Grey Roger


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

Date: Tue, 18 Nov 1997 12:02:38 -0600
From: pverdret@sonovision-itep.fr
Subject: Re: Creating a call tree
Message-Id: <879875446.6680@dejanews.com>

In article <slrn66p3tq.9du.jwilf@darepc.jpl.nasa.gov>,
  jwilf@darepc.jpl.nasa.gov (Joel Wilf) wrote:
>
> Lately I've been examining a system chock full of perl scripts: cgi,
> sysadmin, libraries of subroutines, etc.
>
> Finding all the perl scripts and the subroutines defined in them is easy
> (thanks tp File::Find).  But I haven't found a good way to construct a call
> tree -- a list of all the subroutines called from a main module, the
> subroutines called by those subroutines, and so on.
>
> I've looked at two approaches, so far.  The first is the brute force
> approach: go through every line of the module and try to pick out all the
> calls.  The problem is ensuring that all the calls are found, not just the
> ones prepended with :: or &.
>
> The second approach, which intrigues me, is using the perl debugger.  I've
> played with running the program inside the debugger, using the 'c' command,
> then examining the subroutines with 'S'.  However: I don't know how to do
> this non-interactively (i.e., call the debugger from a script, issue the
> commands, and redirect the DB:OUT output).  Also, I wonder how I can get
> *all* calls, not just the ones found by executing a particular branch of the
> program.
>
> Is anyone out there building call trees for perl scripts?
> And: can you use the perl debugger (in batch mode, somehow) to create one?
>
> Any thoughts would be appreciated.

Install the packages Devel::CallTree.pm and Tree.pm attached below.
And try:

% perl -d:CallTree test.pl

The following test file:

 sub ack {
  my($x, $y, $z) = @_;
  if ($x == 0) {
    $y + $z;
  } else {
    if ($x <= 2 and $z == 0) {
      $x - 1;
    } elsif ($x > 2 and $z == 0) {
      $y;
    } else {
      ack($x - 1, $y, ack($x, $y, $z - 1));
    }
  }
 }

 ack(3, 3, 1);

could produce the following trace:

 TOPLEVEL
 main::ack(3, 3, 1)
  |_ main::ack(3, 3, 0)
  |_ main::ack(2, 3, 3)
     |_ main::ack(2, 3, 2)
     |  |_ main::ack(2, 3, 1)
     |  |  |_ main::ack(2, 3, 0)
     |  |  |_ main::ack(1, 3, 1)
     |  |     |_ main::ack(1, 3, 0)
     |  |     |_ main::ack(0, 3, 0)
     |  |_ main::ack(1, 3, 3)
     |     |_ main::ack(1, 3, 2)
     |     |  |_ main::ack(1, 3, 1)
     |     |  |  |_ main::ack(1, 3, 0)
     |     |  |  |_ main::ack(0, 3, 0)
     |     |  |_ main::ack(0, 3, 3)
     |     |_ main::ack(0, 3, 6)
     |_ main::ack(1, 3, 9)
        |_ main::ack(1, 3, 8)
        |  |_ main::ack(1, 3, 7)
        |  |  |_ main::ack(1, 3, 6)
        |  |  |  |_ main::ack(1, 3, 5)
        |  |  |  |  |_ main::ack(1, 3, 4)
        |  |  |  |  |  |_ main::ack(1, 3, 3)
        |  |  |  |  |  |  |_ main::ack(1, 3, 2)
        |  |  |  |  |  |  |  |_ main::ack(1, 3, 1)
        |  |  |  |  |  |  |  |  |_ main::ack(1, 3, 0)
        |  |  |  |  |  |  |  |  |_ main::ack(0, 3, 0)
        |  |  |  |  |  |  |  |_ main::ack(0, 3, 3)
        |  |  |  |  |  |  |_ main::ack(0, 3, 6)
        |  |  |  |  |  |_ main::ack(0, 3, 9)
        |  |  |  |  |_ main::ack(0, 3, 12)
        |  |  |  |_ main::ack(0, 3, 15)
        |  |  |_ main::ack(0, 3, 18)
        |  |_ main::ack(0, 3, 21)
        |_ main::ack(0, 3, 24)

These packages are provided without any warrantee ;-)
Philippe

--------------------------------------------------------------------
# Author: philippe Verdret, Sonovision-Itep 1997
# pverdret@sonovision-itep.fr
# todo: define a node class
require 5.000;
use strict;
package Tree;
use Carp;

use vars qw($ATTRIBUTES $CHILDREN_HASH $CHILDREN_LIST);
*ATTRIBUTES = \0;		# so it's a constant
*CHILDREN_LIST = \1;
# not used
#*CHILDREN_HASH = \1;

sub new {
  my $receiver = shift;
  my $node = shift;
  my $class = (ref $receiver or $receiver);
  my $self = bless {}, $class;
  if (defined $node) {
    $self->{$node} = [];
    $self->attributes($node, 'father' => @_);
  }
  $self;
}
# Purpose: Node access by name
# Arguments:
# Returns:
sub node {
  my $self = shift;
  my $node = shift;
  $self->{$node};
}
# Pupose: remove a node and all these children
# Arguments: node name
sub deletenode {
  my $self = shift;
  my $node = shift;
  delete $self->{$node};
}
sub addnode {
  my $self = shift;
  my $father = shift;
  my $node = shift;
  if (exists $self->{$node}) {	# insure uniqueness
    my $attribute =  ${$self->{$node}}[$ATTRIBUTES];
    if ($attribute->{'father'} ne $father) {
      croak qq"can't have two nodes with the '$node' name";
    }
  }
  ${$self->{$node}}[$ATTRIBUTES] = { 'father' => $father, @_ }; # Node's
attributes
  push(@{$self->{$father}}, $node); # Node's children
}

# Purpose: access to node's attributes
# Arguments and returns:
# 1. (node) -> a. in a list context returns all attributes
#              b. in a scalar context returns the hash reference
# 2. (node, one_key) -> returns the associated value
# 3. (node, [key, value]+) -> add new attributes to node and returns all
attributes
sub attributes {
  my $self = shift;
  my $node = shift;
  if (exists $self->{$node}) {
    my $attributes = ${$self->{$node}}[$ATTRIBUTES];
    if (@_) {
      if ($#_ >= 1) {
	my %attributes;
	if (defined %{$attributes}) {
	  %attributes = (%{$attributes}, @_);
	} else {
	  %attributes = @_;
	}
	${$self->{$node}}[$ATTRIBUTES] = \%attributes; # Set node's attributes
        %attributes;
      } else {
	$attributes->{$_[0]};	# return the associated value
      }
    } else {
      if (defined %{$attributes}) {
	if (wantarray) {	# in a list context
	  %{$attributes};	# returns all node's attributes
	} else {		# in a scalar context
	  $attributes;		# return the hash reference
	}
      } else {
	();
      }
    }
  } else {
    croak qq^"$node" doesn't exist^;
  }
}
sub father {
  my $self = shift;
  my $node = shift;
  my $attribute =  ${$self->{$node}}[$ATTRIBUTES];
  $attribute->{'father'};
}
sub isleaf {
  my $self = shift;
  my $node = shift;
  defined ${$self->{$node}}[$CHILDREN_LIST] ? 0 : 1;
}
sub children {
  my $self = shift;
  my $nodeName = shift;
  my $node = $self->{$nodeName};
  @{$node}[$CHILDREN_LIST..$#{$node}]
}
sub childof {			# use CHILDREN_HASH instead
  my $self = shift;
  my $child = shift;
  my $father = shift;
  grep /^$child$/, $self->children($father);
}
sub scan {
  my $self = shift;
  my $node = shift;
  if (exists $self->{$node}) {
    local *before = (shift or sub {}); # define a local routine
    local *after = (shift or sub {}); # define a local routine
    $self->subtree($node, 0);	# node name and depth
  } else {
    croak qq^"$node" node doesn't exist^;
  }
}
# Arguments: node name, depth
sub subtree {
  my $self = shift;
  my $node = shift;
  my $depth = shift;
  my $subNode;
  my $attribute;
  my @node = $self->children($node);
  while (@node) {
    $subNode = shift @node;
    $attribute = ${$self->{$subNode}}[$ATTRIBUTES];
    before($self, $depth, $subNode, $attribute, @node);
    next if $subNode eq $node;	# it's the Root
    if (defined ${$self->{$subNode}}[$CHILDREN_LIST]) { #
       $self->subtree($subNode, $depth + 1);
       after($self, $depth, $subNode, $attribute, @node);
    }
  }
}
sub prettyprint {
  my $self = shift;
  my $node = shift;
  my @key = @_;
  my $root = " ";
  my $branch   = "  |";
  my $nobranch = "   ";
  my $child =    "  |_ ";
  my $etc =      "  |_ ...";
  my $maxDepth = 20;
  use vars qw(@edge);
  local @edge = ('');
  $self->scan($node,
	      sub {
		my $self = shift;
		my $level = shift;
		my $node = shift;
		my $attributes = shift;
		if ($level) {
		  if (@_) {	# is there any other branch at this level?
		    $edge[$level] = "$branch";
		  } else {
		    $edge[$level] = "$nobranch";
		  }
		  print @edge[0..$level-1], $child,
		  (map { $attributes->{$_} } @key),  "\n";
		} else {	# zero
		  print $root, (map { defined $attributes->{$_} ?
$attributes->{$_} : '' } @key), "\n";
		}
	      });
}
1;
__END__

----------------------------------------------------------------------------
package Devel::CallTree;

package DB;
sub DB {}
sub sub { &$sub }
use Tree;
my $TRACE = 0;
my $callTree = new Tree;
my $nodeid = -1;
my @stack = ($nodeid);
$callTree->addnode($nodeid, $nodeid,
		   'label' => 'TOPLEVEL', 'args' => undef);

# or redefine this function on the fly # with a require, for a call tree
of a program slice sub sub {  $callTree->addnode($stack[$#stack],
++$nodeid,	       'label' => $sub, 	       'args' => '(' .
(join ', ', @_) . ')'			);  $nodelabel{$sub} =
$stack[$#stack] unless exists $nodelabel{$sub};  print STDERR "$sub args:
@_ [in $sub{$sub} $stack[$#stack] $nodeid ]\n" if $TRACE;  push @stack,
$nodeid;  if (wantarray) {  @return = &$sub;  pop @stack;  @return;  }
else {	$return = &$sub;  pop @stack;  $return;  } }

END {
  local *sub = sub { &$sub };
  select STDERR;
  print "\n";
  print "Call tree of '$DB::node'\n" if $TRACE;
  $callTree->prettyprint(-1, qw(label args));
}
1;
__END__

-------------------==== Posted via Deja News ====-----------------------
      http://www.dejanews.com/     Search, Read, Post to Usenet


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

Date: Tue, 18 Nov 1997 17:27:19 GMT
From: bart.mediamind@tornado.be (Bart Lateur)
Subject: Re: Debugging CGI programs
Message-Id: <3471cfb4.22346126@news.tornado.be>

"Joseph N. Hall" <joseph@5sigma.com> wrote:

>Get the CGI module (that's what it's called, and it's part of
>the 5.004 distribution) and learn to run your program from the command
>line.  Also you might want to check out Lincoln's book.

"Lincoln's book"? I haven't heard of this one before. What's the title,
what's it about, and... how good is it?

	Bart Lateur
	bart.mediamind@tornado.be


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

Date: Tue, 18 Nov 1997 11:48:33 -0500
From: Luc St-Louis <lucs@cam.org>
Subject: Re: eval and scoping problem
Message-Id: <3471C6E1.1756613D@cam.org>

Mike Stok wrote:
> What I try to do is have use strict in effect as much as I can and then
> explicitly allow the thing I'm interested in in the smallest "natural"
> block (i.e. I don't add a bare block unless I'm in the middle of some long
> linear code sequence)
> 
>   sub Foo {
>     no strict 'refs';
> 
>     ...
>     ${ $pkg . "::$Var" } = $Val;
>     ...
>   }
> 
> I think this gives a maintainer a fair indication of what to expect and
> doesn't compromise the benefits of use strict for the rest of the script.
> 
> Of course that's just me, I make mistakes more often than not ;-)

Well, you're not alone! I guess I'll use the "natural block" approach.

Thanks - Luc


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

Date: 18 Nov 1997 16:02:42 GMT
From: "James Richardson" <jamesr@aethos.co.uk>
Subject: Re: exclusive file rights
Message-Id: <01bcf43b$7cd4cd20$26c0a4c1@kitkat.aethos.co.uk>

Matt Dowell <mdowell@mmm.com> wrote in article <34707CF0.F50@mmm.com>...
> We are running HP-UX and for some reason flock is not in the OS. So here
> is what I did to get around this. I think it's better anyways.
> 
> I first lock the file, and I do that by creating a file with the same
> name, just a .LOCK on the end.
> 

OK, your method is NOT better then kernal implemented file locking.
(Otherwise why would they bother to put it in the kernal?)

Main Reason:

	The test for the file, and the subsequent creation of the file is not an
atomic action. This is undergrad 1st year stuff...
	The problem occurs because under a preemptive multitasking system, you
never know when your prcess will be interrupted. The problem becomes more &
more acute when the system is under load....

	Process A						Process B

								Start
								---Switch
	Start
	Check for lock file
	Not there....					
	-Switch				
								Check for lock
								not there
								Create file (I think i have a lock)
								-Switch
	-Create File (I think i have a lock)

Now process A and B both think they have a lock. Problem time....

> 
> Works for me.
> 

Hmm... maybe, but it is NOT infallible. In fact getting file locking to
work right is quite a difficult thing to do.

Under HPUX there is lockf which can enforce mandatory record/file locking..
and I think that this also exists under Solaris...(but theres no Perl
interface to this... unless somebody writes one!)


> When someone tried to access the file, i check for the filname.LOCK
> first, if there then loop. Contantly checking.

Busy wait!!!!!


I havent had to do this... but maybe if you were to check that the file
exists, then yield (i.e. sleep or something), then check again, you might
have more reliable results. Thats a bit of guess but it seems reasonable.


James Richardson




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

Date: 18 Nov 1997 17:22:11 GMT
From: sb@en.muc.de (Steffen Beyer)
Subject: Re: how do i append todays date to the end of a filename?
Message-Id: <64sis3$sc7$1@en1.engelschall.com>

Andrew Ellerton <andrewe@technologyXchange.com> wrote:

> Mitzi wrote:
>> 
>> i cant seem to get the date into a string format, i am a very new perl
>> programmer. thanks.

> I use the program below to "keep" a version of a file in a temporary
> directory. It stamps the copy with the date/time.

> [...]
> $now = POSIX::strftime("%y%m%d.%H%M", localtime(time));
> [...]

> The strftime function is the one you're after. Try looking it up in the
> Programming Perl book or use man strftime.

> Hope this is useful.
> Andrew

A much simpler way goes as follows:

$date = `/bin/date +%y%m%d`;

The argument is actually a format string and can be set to almost anything
you want. See "man date" for more info.

Note that adding "$$" (the current process's ID number) at the end of the
string instead of hour and minute (as in the previous example) is more
secure if concurrent processes can exist.

Yours,
-- 
    |s  |d &|m  |    Steffen Beyer <sb@sdm.de> http://www.sdm.de/
    |   |   |   |     "Doing science means to let reality teach
    |   |   |   |      you better over and over again, forever"


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

Date: 18 Nov 1997 17:04:19 GMT
From: Eli the Bearded <usenet-tag@qz.little-neck.ny.us>
Subject: Re: How to determine absolute file path on UNIX
Message-Id: <eli$9711181244@qz.little-neck.ny.us>

Alfred von Campe <alfred@hw.stratus.com> wrote:
> Eli the Bearded (usenet-tag@qz.little-neck.ny.us) wrote:
> |>Because it can't be done right.
> But you can make a good guess that's right most of the time
> (and that's all I need for my situation).  Actually, the

Accept $PWD, and don't worry about normalizing the path.

> answer from pwd is really what I need (I know your example
> had some cases where this fails, but I don't think I'll be
> affected by them).  So what algorithm does pwd use?  I want

/bin/pwd (as opposed to shell builtins) uses, I believe, the
following algorithm:

A) Determine inode number of current directory via stat(2) .
B) chdir(2) to ..
C) Determine name associated with inode from A via stat(2) .
D) Loop to A until the inode of . equals the inode of ..
E) Assemble the collected directory names into a path name

This requires read privledges for every directory in the path.

Elijah
------
bet you never thought pwd was so crude


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

Date: 18 Nov 1997 17:32:37 GMT
From: root@reliant.select.net ()
Subject: how to reference index into array by it's value
Message-Id: <64sjfl$84l@newshub.atmnet.net>

-- 
Hello;

@array=('zero', 'one', 'two', 'three', 'four', 'five');

I want to be able to retrieve 2 when I apply "two"; I could make a hash
to do the same thing, I know, but is there an easier way?;

--matt hempel;

____________________________________________________________________________
Matthew Hempel			SelectNet Internet Services
Systems Administrator		Carlsbad, California
				760) 438-9555


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

Date: Tue, 18 Nov 1997 10:22:20 -0700
From: Arne Jamtgaard <arnej@fc.hp.com>
Subject: Is there a way to pass file handles to another process?
Message-Id: <3471CECC.3CAD@fc.hp.com>

I'm writing a program that will cycle through other mini-programs, 
and I'm trying to keep some of the performance overhead down.  Is
there a way to fork/exec/piped open such that I can open a logfile
once in the main program, and not have to close it, call a mini-prog,
have the mini-prog open it, write, close, (repeat...)

If this was in the FAQ I missed it - sorry.

Arne
-- 
When you're swimmin' in the creek
And an eel bites your cheek
That's a moray!
     -- Fabulous Furry Freak Brothers


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

Date: 18 Nov 1997 16:09:17 GMT
From: as646@FreeNet.Carleton.CA (John Robson)
Subject: Looking for flat database modules...
Message-Id: <64sejd$pqe@freenet-news.carleton.ca>


I'm looking for a FLAT database module that would hopefully do at least the
following :
- Open, close a flat file.
- Query the database with SQL-like commands.
- Add, modify, delete records with file-locking.
And it should be simple to use!
Any suggestions, pointers, leads, info?  Thanks!




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

Date: 18 Nov 1997 18:02:01 GMT
From: dalonso@u.washington.edu (Darwin O.V. Alonso)
Subject: modules, ignoring Tom Phoenix
Message-Id: <64sl6p$1cv8$1@nntp6.u.washington.edu>
Keywords: modules Fortran


Tom Phoenix responded to my query about using perl to run numerical
analysis (paraphrasing):

> Not stupid if I learn to use
> modules,
> objects,
> tie'd variables


Now I had never heard of any of these in perl, but I've read this news group
long enough to know that it's not wise to ignore Tom Phoenix.
So, I cleaverly (for me at least) grepped through the man pages for
modules, and under "man perlxs" I found modules and objects.
For all you uninitiated:
  XS is a language used to create an extension interface between Perl and
  some C library which one wishes to use with Perl.  (from man perlxs)
Try man perltie" for information on tiing (sp??) structures to variables.

I haven't tried out the marriage of C and perl yet, however
I see infinite possibilities and feel that my life is irrevocably changed.
But, speaking of unholy alliances, will XS to allow perl to
access a fortran function? After all, everyone knows that
**** fortran is best for numerical programming *** ;-),
and with perl's ability to massage input ... .


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

Date: 18 Nov 1997 18:54:25 GMT
From: Tom.Grydeland@phys.uit.no (Tom Grydeland)
Subject: Re: modules, ignoring Tom Phoenix
Message-Id: <slrn673p31.9e5.Tom.Grydeland@mitra.phys.uit.no>

On 18 Nov 1997 18:02:01 GMT,
Darwin O.V. Alonso <dalonso@u.washington.edu> wrote:

> [...] it's not wise to ignore Tom Phoenix.

True.

> But, speaking of unholy alliances, will XS to allow perl to
> access a fortran function? After all, everyone knows that
> **** fortran is best for numerical programming *** ;-),
> and with perl's ability to massage input ... .

Absolutely.  You need a C wrapper, but it should be simple.

The PGPlot module uses the PGPlot subroutine library, entirely written
in Fortran, with just a thin layer of glue.  Check it out.

As for numerical programming; have you looked at PDL?

-- 
//Tom Grydeland <Tom.Grydeland@phys.uit.no>


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

Date: Tue, 18 Nov 1997 12:56:33 -0500
From: Chris Braiotta <chris_braiotta@harvard.edu>
Subject: Re: perl conversion of curly quotes out of web form
Message-Id: <3471D6C8.E973C8C7@harvard.edu>



Bruce Wyman wrote:

> Setting up a web form in which a random person will be pasting a bunch of
> word document formatted text. The pasted material will contain right and
> left double quotation marks (curly quotes) and the single flavors of the
> same.
> ...
> The obvious, to me, is something like
> $foobar=~s/[curly bits]/"/g;
> but that doesn't cut it - there are no values for [curly bits].

Not the most elegant solution, but I just find some curly quotes and
cut-and-paste them insto my =~ s/// statement. I'm not sure how that would
work for curly quotes coming from multiple platforms, but it works well for
mac files sitting on a UNIX box.

Chris Braiotta
chris_braiotta@harvard.edu



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

Date: Tue, 18 Nov 1997 11:19:04 -0500
From: Michael Shannon <mshannon@lds.com>
Subject: Problem installing Perl 5.004_04 - miniperl.o
Message-Id: <3471BFF8.7D82@lds.com>

Hi,

I am trying to install Perl 5.004_04 onto a Solaris 2.5.1 machine using
the standard GCC libraries. Unfortunately, I am receiving the following
fatal error: 

	ld: fatal : Symbol referencing errors. No output written to 	miniperl
*** Error Code 1

	make: Fatal error: Command Failed for target `miniperl'

Does anyone have any idea as to what might be causing this problem and
the appropriate work around. I already have Perl 3.003 installed on the
machine and want to install this version to a seperate directory.

Thanks...Michael Shannon
mshannon@lds.com


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

Date: 18 Nov 1997 15:08:24 GMT
From: "John Emmerling" <jemmerli@cscmail.csc.com>
Subject: Q: will perlis.dll work w/5.004_02 dist from Gurusamy Sarathy?
Message-Id: <01bcf433$e2929d20$8d1456c0@C104357.gsfc.nasa.gov>


Hi:

I downloaded the Perl 5.004_02 distribution from Gurusamy Sarathy,
because I understand it makes installation of CPAN modules easier.

I had been using perlis.dll, I am wondering will this still work if I
install
the new Perl distribution?


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

Date: Tue, 18 Nov 1997 08:57:07 -0600
From: tadmc@flash.net (Tad McClellan)
Subject: Re: sequence point?
Message-Id: <3cas46.d51.ln@localhost>

Bob Nelson (bnelson@netcom.com) wrote:
: Is the behaviour of ``$i = 3; $i = $i++'' ^(un|implementation-)*defined$ 
: in Perl?


undefined

  No (perl will issue an error message if it does not know what to
      do when it encounters a construct)

-----

implementation-defined

  Yes, most code (the perl intepreter, in this case) is defined 
       by its implementation   ;-)

-----

unimplementation-defined

  I dunno what that means

-----

implementation-undefined

  ditto

-----

defined

   Yes

-----


Why do you ask?

What do you ask?   ;-)


Do you mean platform (or port) dependant? (should work the same in all perls)

Do you mean does '$i = 3;' always get evaluated before '$i = $i++'?  (Yes)

Do you not understand why that code behaves the way it does?


I can't even figure out what you _want_ to do.

   $i++;    # or:  $i += 1;

by itself is used to increment the value of $i.


Something else?


--
    Tad McClellan                          SGML Consulting
    tadmc@flash.net                        Perl programming
    Fort Worth, Texas


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

Date: Tue, 18 Nov 1997 17:35:49 GMT
From: Bob Nelson <bnelson@netcom.com>
Subject: Re: sequence point?
Message-Id: <64sjll$lal$1@renpen.nelson.org>

Gabor <gabor@vinyl.quickweb.com> wrote:
> In article <64rg3j$2pl$1@renpen.nelson.org>, Bob Nelson wrote:
> >Is the behaviour of ``$i = 3; $i = $i++'' ^(un|implementation-)*defined$ 
> >in Perl?

> I don't know.  But why would you want to do something as stupid as
> that?  What is the purpose of it?  I know for certain that it ias
> undefined in C, and I would hope for the same in Perl.

The ``purpose'' is to discover how Perl may differ from C in terms of
its handling of certain expressions (yielding no warning with ``-w''). 
Why should one characterize such an exploration of a language's 
behavior as ``stupid''?

BTW, you were already in ^n?vim?$ insert mode when you ``knew 
for certain'' that is ``ias'' [sic] undefined in C.

-- 
========================================================================
          Bob Nelson -- Dallas, Texas, USA (bnelson@iname.com)
             http://www.geocities.com/ResearchTriangle/6375
========================================================================


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

Date: Tue, 18 Nov 1997 10:21:59 -0600
From: thomas@y4.com
Subject: Spell check dictionary where?
Message-Id: <879869795.339@dejanews.com>

Anyone know where to get an English language spell check dictionary for
use with PERL?

Thank you kindly!
Thomas.

-------------------==== Posted via Deja News ====-----------------------
      http://www.dejanews.com/     Search, Read, Post to Usenet


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

Date: Tue, 18 Nov 1997 16:37:10 GMT
From: jzawodn@wcnet.org (Jeremy D. Zawodny)
Subject: Re: Spell check dictionary where?
Message-Id: <3471c423.2451444@igate.hst.moc.com>

[original author automagically cc'd via e-mail]

On Tue, 18 Nov 1997 10:21:59 -0600, thomas@y4.com wrote:

>Anyone know where to get an English language spell check dictionary for
>use with PERL?

/usr/dict/words on many systems is a good starting point.

Jeremy
-- 
Jeremy D. Zawodny                 jzawodn@wcnet.org
Web Server Administrator          www@wcnet.org
Wood County Free Net (Ohio)       http://www.wcnet.org/


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

Date: Tue, 18 Nov 1997 15:59:43 GMT
From: aml@world.std.com (Andrew M. Langmead)
Subject: Re: split problems
Message-Id: <EJun3J.L53@world.std.com>

tfletche@pcocd2.intel.com (Terry Michael Fletcher - PCD ~) writes:

>Wim Verhaegen (verhaege@esat.kuleuven.ac.be) so eloquently and verbosely pontificated:
>> 
>> In the following, I always use the example
>> m1 a b c d e foo=5 bar=6 foobar pi=3.1415

>with this example, qw// will work:

>($name, $a, $b, $c, $d, $e, @pars) = qw($string);

Huh?

$string = 'm1 a b c d e foo=5 bar=6 foobar pi=3.1415';
($name, $a, $b, $c, $d, $e, @pars) = qw($string);
print "$name\n";


-- 
Andrew Langmead


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

Date: 18 Nov 1997 16:37:38 GMT
From: tfletche@pcocd2.intel.com (Terry Michael Fletcher - PCD ~)
Subject: Re: split problems
Message-Id: <64sg8i$1dm$1@news.fm.intel.com>

Terry Michael Fletcher - PCD ~ (tfletche@pcocd2.intel.com) so eloquently and verbosely pontificated:
> Wim Verhaegen (verhaege@esat.kuleuven.ac.be) so eloquently and verbosely pontificated:
> > 
> > In the following, I always use the example
> > m1 a b c d e foo=5 bar=6 foobar pi=3.1415
> 
> with this example, qw// will work:
> 
> ($name, $a, $b, $c, $d, $e, @pars) = qw($string);

damn!!  what was i thinking?  thats what i get for being in a hurry and
not thinking.  this was mistake #1.  i meant:

($name, $a, $b, $c, $d, $e, @pars) = eval "qw($string)";

i forgot about qw// being a single quote operator :(

> if you want to allow some whitespace around the "=", i suggest:
> 
> $string =~ s/\s+=\s+/=/g;
> ($name, $a, $b, $c, $d, $e, @pars) = qw($string);

mistake #2.  what a moron.  i meant:

$string =~ s/\s*=\s*/=/g;

which, like i said, wont leave the whitespace around the "=", so that
might be bad.

SO, here is a better solution that i thought of, only moments after
realizing that i screwed up:

($name,$a,$b,$c,$d,$e,@pars) = /(?:\s+|^)([\w.]+(?:\s*=\s*[\w.]+)?)+/g;

which only returns the list of options (with assignments) and also allows
for the decimal in PI.

sorry about posting the bogus stuff, this one works!

hope that helps.

-- 
#!/usr/local/bin/perl -w
system("pod2html $0")&&die"Just another Perl hacker,\n";system("
lynx $0.html")&&die"Just another Perl hacker,\n";unlink"$0.html";

=head1 Just another POD hacker, tfletche@pcocd2.intel.com


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

Date: 18 Nov 1997 16:58:50 GMT
From: bjepson@ids.net (Brian Jepson)
Subject: Re: Win32 Perl and NT IIS
Message-Id: <slrn673i8u.5qv.bjepson@gelvis.ids.net>

In article <64s1jq$7f6$1@despair.u-net.com>, Debbi Stott wrote:
>I'm having a problem unique to Netscape Navigator.  I have a perl script
>which parses a text file created by a satellite data stream into an HTML
>page which updates on a minute by minute basis.  This all works wonderfully
>well under Internet Explorer but everytime I try to view via Netscape
>Navigator 3.0 or above I get the following message:
>
>You have started to download an file of type application/x-perl click on
>"More Info" to learn how to extend Navigator's capabilities.
>
>click away and you get a screen that tells you Netscape doesn't have a
>plug-in for use with application/x-perl.
>
>Why is it doing this, the server should do the work of processing the perl
>script and not trouble the Navigator browser at all.
>
>The  Script Map in
>LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/SERVICES/W3SRV/PARAMETERS is set
>to execute the following for .pl and .cgi extentions:
>
>d:\program files\perl\perl5\bin\perl.exe %s %s
>
[...]

Debbi,

Did you look at the Perl for Win32 FAQ? It is located at:

  http://www.activestate.com/support/faqs/Win32_Evangelo_faq.htm

This question is answered under 'When I try to run a CGI script from my 
browser, it tries to download a file of type "application/x-perl" instead. 
What gives?'

However, in looking at the answer to the question, it states that this is 
a problem encountered when using Perl for ISAPI. In your question you say 
that you are using perl.exe - is there a possibility that you also have an 
entry that associates .pl with perlis.dll? If not, perhaps the FAQ entry will
help anyhow. FWIW, I've only seen this problem exhibited with Perl for ISAPI,
and if I'm not mistaken, build 313 corrects this problem in general.

Hope this helps,

-- 
Brian Jepson * (bjepson@ids.net) * http://users.ids.net/~bjepson


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

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

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