[31655] in Perl-Users-Digest
Perl-Users Digest, Issue: 2918 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Apr 22 06:14:26 2010
Date: Thu, 22 Apr 2010 03:14:12 -0700 (PDT)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Thu, 22 Apr 2010 Volume: 11 Number: 2918
Today's topics:
Re: Get XML content using XML::Twig sln@netherlands.com
Re: Get XML content using XML::Twig <klaus03@gmail.com>
Re: Get XML content using XML::Twig <kalyanrajsista@gmail.com>
Re: Get XML content using XML::Twig <klaus03@gmail.com>
Re: Get XML content using XML::Twig <klaus03@gmail.com>
Re: Get XML content using XML::Twig <RedGrittyBrick@spamweary.invalid>
Re: Get XML content using XML::Twig <RedGrittyBrick@spamweary.invalid>
Re: Trying to add exception handling, getting errors af <ben@morrow.me.uk>
Re: Trying to add exception handling, getting errors af <davidmichaelkarr@gmail.com>
Re: Trying to add exception handling, getting errors af <paduille.4061.mumia.w+nospam@earthlink.net>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Wed, 21 Apr 2010 17:31:48 -0700
From: sln@netherlands.com
Subject: Re: Get XML content using XML::Twig
Message-Id: <iu0vs5pijg3948qc978fotfj3ek0jrrvgb@4ax.com>
On Wed, 21 Apr 2010 11:48:59 -0700 (PDT), Klaus <klaus03@gmail.com> wrote:
>On 21 avr, 20:07, s...@netherlands.com wrote:
>> On Wed, 21 Apr 2010 10:06:14 -0700 (PDT), Klaus <klau...@gmail.com> wrote:
>> >On 21 avr, 14:35, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
>> >> Hello all,
>> >> I'm trying to parse the XML using XML::Twig Module as my XML could be
>> >> very large to handle using XML::Simple. Please help me out of how to
>> >> print the values based on the following...
>> >> <B>get the values of Sender, Receiver</B>
>> >> <B>get the FileType. In this case possible values are
>> >> InitTAP,FatalRAP,ReTxTAP</B>
>
>> Thats nice. Lets say he generally said "in this case its:"
>> InitTAP ReTxTAP FatalRAP
>> Why? Because its the file type.
>> Maybe he wants all file types of the sender/reciever's.
>
>in that case you use XML::Reader->newhd(... {filter => 2});
>
>use strict;
>use warnings;
>use XML::Reader;
>
>my $rdr = XML::Reader->newhd(\*DATA, {filter => 2});
>
>my ($sender, $receiver);
>
>while ($rdr->iterate) {
> if ($rdr->path eq '/Data/ConnectionList/Connection/Sender') {
> $sender = $rdr->value;
> }
> elsif ($rdr->path eq '/Data/ConnectionList/Connection/Receiver') {
> $receiver = $rdr->value;
> }
> elsif ($rdr->is_start
> and $rdr->path =~ m{\A /Data/ConnectionList/Connection/
>FileItemList/FileItem/FileType/ (\w+) \z}xms) {
> printf "Sender: %-5s, Receiver: %-5s, Type: %s\n",
> $sender, $receiver, $1;
> }
>}
>
>Here is the output
>
>Sender: BRADD, Receiver: SHANE, Type: InitTAP
>Sender: BRADD, Receiver: SHANE, Type: ReTxTAP
>Sender: BRADD, Receiver: SHANE, Type: FatalRAP
This is pretty good. I assume it does attribute/value as well.
It appears to be a lot of regex work, the more unknown the
elements become, but thats a tree stack.
It would be good though to have a capture mechanism, where
xml capture can be triggered on/off by the user, later to
be regurgitated to the user (on demand), and given to an
xml::simple style mechanism to turn it into filtered records.
It wouldn't change the simple, low memmory stream parsing at all,
just the source would be captured (appended) on/off to a named buffer,
on demand.
Its not as easy as it seems though. CaptureON/OFF (bufname, before/after),
nested capture's, single data pool. I think I've done this before.
-sln
------------------------------
Date: Thu, 22 Apr 2010 00:39:33 -0700 (PDT)
From: Klaus <klaus03@gmail.com>
Subject: Re: Get XML content using XML::Twig
Message-Id: <b362f017-7c73-4336-b724-a8db029dd265@r1g2000yqb.googlegroups.com>
On 22 avr, 02:31, s...@netherlands.com wrote:
> On Wed, 21 Apr 2010 11:48:59 -0700 (PDT), Klaus <klau...@gmail.com> wrote=
:
> >On 21 avr, 20:07, s...@netherlands.com wrote:
> >> On Wed, 21 Apr 2010 10:06:14 -0700 (PDT), Klaus <klau...@gmail.com> wr=
ote:
> >> >On 21 avr, 14:35, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
> >> >> Hello all,
> >> >> I'm trying to parse the XML using XML::Twig Module as my XML could =
be
> >> >> very large to handle using XML::Simple. Please help me out of how t=
o
> >> >> print the values based on the following...
> >> >> =A0<B>get the values of Sender, Receiver</B>
> >> >> =A0<B>get the FileType. In this case possible values are
> >> >> InitTAP,FatalRAP,ReTxTAP</B>
> This is pretty good. I assume it does attribute/value as well.
Yes it does, just put an '@' symbol in the path, for example
'/InitTAP/ChargeInfo/@attrib1'
> It appears to be a lot of regex work, the more unknown the
> elements become, but thats a tree stack.
>
> It would be good though to have a capture mechanism, where
> xml capture can be triggered on/off by the user, later to
> be regurgitated to the user (on demand), and given to an
> xml::simple style mechanism to turn it into filtered records.
For simple structures where you know exactly what you are looking for,
you can use {filter =3D> 5} like so
use strict;
use warnings;
use XML::Reader;
use Data::Dumper;
my $rdr =3D XML::Reader->newhd(\*DATA, {filter =3D> 5},
{ root =3D> '/Data/ConnectionList/Connection/FileItemList/FileItem/
FileType', branch =3D> [
'/InitTAP/TAPSeqNo',
'/ReTxTAP/TAPSeqNo',
'/FatalRAP/RAPSeqNo',
'/InitTAP/ChargeInfo/@attrib1',
'/InitTAP/ChargeInfo/TAPCurrency',
'/ReTxTAP/ChargeInfo/TAPCurrency',
'/FatalRAP/ChargeInfo/TAPCurrency',
] },
);
while ($rdr->iterate) {
print Dumper($rdr->rvalue), "\n";
}
> It wouldn't change the simple, low memmory stream parsing at all,
> just the source would be captured (appended) on/off to a named buffer,
> on demand.
> Its not as easy as it seems though. CaptureON/OFF (bufname, before/after)=
,
> nested capture's, single data pool. I think I've done this before.
For general capture into a buffer, you would use {filter =3D> 3, using
=3D> '/Data/ConnectionList/Connection/FileItemList/FileItem/FileType'}
use strict;
use warnings;
use XML::Reader;
my $rdr =3D XML::Reader->newhd(\*DATA, {filter =3D> 3,
using =3D> '/Data/ConnectionList/Connection/FileItemList/FileItem/
FileType'});
my $buffer =3D '';
while ($rdr->iterate) {
my $indentation =3D ' ' x ($rdr->level - 1);
if ($rdr->path eq '/') {
if ($rdr->is_start) {
$buffer =3D '';
}
elsif ($rdr->is_end) {
print "\n\n buffer =3D=3D>\n", $buffer, "\n\n";
}
next;
}
if ($rdr->is_start) {
$buffer .=3D $indentation.'<'.$rdr->tag.
join('', map{" $_=3D'".$rdr->att_hash->{$_}."'"} sort keys %
{$rdr->att_hash}).
'>'."\n";
}
if ($rdr->type eq 'T' and $rdr->value ne '') {
$buffer .=3D $indentation.' '.$rdr->value."\n";
}
if ($rdr->is_end) {
$buffer .=3D $indentation.'</'.$rdr->tag.'>'."\n";
}
}
------------------------------
Date: Thu, 22 Apr 2010 01:24:11 -0700 (PDT)
From: alwaysonnet <kalyanrajsista@gmail.com>
Subject: Re: Get XML content using XML::Twig
Message-Id: <08dcd06b-59bb-49cc-90f4-1b3333473128@w20g2000prm.googlegroups.com>
On Apr 22, 12:39=A0pm, Klaus <klau...@gmail.com> wrote:
> On 22 avr, 02:31, s...@netherlands.com wrote:
>
> > On Wed, 21 Apr 2010 11:48:59 -0700 (PDT), Klaus <klau...@gmail.com> wro=
te:
> > >On 21 avr, 20:07, s...@netherlands.com wrote:
> > >> On Wed, 21 Apr 2010 10:06:14 -0700 (PDT), Klaus <klau...@gmail.com> =
wrote:
> > >> >On 21 avr, 14:35, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
> > >> >> Hello all,
> > >> >> I'm trying to parse the XML using XML::Twig Module as my XML coul=
d be
> > >> >> very large to handle using XML::Simple. Please help me out of how=
to
> > >> >> print the values based on the following...
> > >> >> =A0<B>get the values of Sender, Receiver</B>
> > >> >> =A0<B>get the FileType. In this case possible values are
> > >> >> InitTAP,FatalRAP,ReTxTAP</B>
> > This is pretty good. I assume it does attribute/value as well.
>
> Yes it does, just put an '@' symbol in the path, for example
> '/InitTAP/ChargeInfo/@attrib1'
>
> > It appears to be a lot of regex work, the more unknown the
> > elements become, but thats a tree stack.
>
> > It would be good though to have a capture mechanism, where
> > xml capture can be triggered on/off by the user, later to
> > be regurgitated to the user (on demand), and given to an
> > xml::simple style mechanism to turn it into filtered records.
>
> For simple structures where you know exactly what you are looking for,
> you can use {filter =3D> 5} like so
>
> use strict;
> use warnings;
> use XML::Reader;
>
> use Data::Dumper;
>
> my $rdr =3D XML::Reader->newhd(\*DATA, {filter =3D> 5},
> =A0 =A0 { root =3D> '/Data/ConnectionList/Connection/FileItemList/FileIte=
m/
> FileType', branch =3D> [
> =A0 =A0 =A0 '/InitTAP/TAPSeqNo',
> =A0 =A0 =A0 '/ReTxTAP/TAPSeqNo',
> =A0 =A0 =A0 '/FatalRAP/RAPSeqNo',
> =A0 =A0 =A0 '/InitTAP/ChargeInfo/@attrib1',
> =A0 =A0 =A0 '/InitTAP/ChargeInfo/TAPCurrency',
> =A0 =A0 =A0 '/ReTxTAP/ChargeInfo/TAPCurrency',
> =A0 =A0 =A0 '/FatalRAP/ChargeInfo/TAPCurrency',
> =A0 =A0 ] },
> =A0 );
>
> while ($rdr->iterate) {
> =A0 =A0 print Dumper($rdr->rvalue), "\n";
>
> }
> > It wouldn't change the simple, low memmory stream parsing at all,
> > just the source would be captured (appended) on/off to a named buffer,
> > on demand.
> > Its not as easy as it seems though. CaptureON/OFF (bufname, before/afte=
r),
> > nested capture's, single data pool. I think I've done this before.
>
> For general capture into a buffer, you would use {filter =3D> 3, using
> =3D> '/Data/ConnectionList/Connection/FileItemList/FileItem/FileType'}
>
> use strict;
> use warnings;
> use XML::Reader;
>
> my $rdr =3D XML::Reader->newhd(\*DATA, {filter =3D> 3,
> =A0 =A0 using =3D> '/Data/ConnectionList/Connection/FileItemList/FileItem=
/
> FileType'});
>
> my $buffer =3D '';
>
> while ($rdr->iterate) {
> =A0 =A0 my $indentation =3D ' =A0' x ($rdr->level - 1);
>
> =A0 =A0 if ($rdr->path eq '/') {
> =A0 =A0 =A0 =A0 if ($rdr->is_start) {
> =A0 =A0 =A0 =A0 =A0 =A0 $buffer =3D '';
> =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 elsif ($rdr->is_end) {
> =A0 =A0 =A0 =A0 =A0 =A0 print "\n\n buffer =3D=3D>\n", $buffer, "\n\n";
> =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 next;
> =A0 =A0 }
>
> =A0 =A0 if ($rdr->is_start) {
> =A0 =A0 =A0 =A0 $buffer .=3D $indentation.'<'.$rdr->tag.
> =A0 =A0 =A0 =A0 =A0 join('', map{" $_=3D'".$rdr->att_hash->{$_}."'"} sort=
keys %
> {$rdr->att_hash}).
> =A0 =A0 =A0 =A0 =A0 '>'."\n";
> =A0 =A0 }
>
> =A0 =A0 if ($rdr->type eq 'T' and $rdr->value ne '') {
> =A0 =A0 =A0 =A0 $buffer .=3D $indentation.' =A0'.$rdr->value."\n";
> =A0 =A0 }
>
> =A0 =A0 if ($rdr->is_end) {
> =A0 =A0 =A0 =A0 $buffer .=3D $indentation.'</'.$rdr->tag.'>'."\n";
> =A0 =A0 }
>
> }
>
>
My intention is to ~
- Get each sender and receiver
- Get the filetype ( could be InitTAP, FatalRAP etc )
- For each of filetype get the TAPSeqNo, NoofCalls etc....
Basically I want all the information in place for processing the
data....
Also, apart from XML::Twig, is there any module which can handle
larger XML files..
any help or suggestions are appreciated.
------------------------------
Date: Thu, 22 Apr 2010 01:29:42 -0700 (PDT)
From: Klaus <klaus03@gmail.com>
Subject: Re: Get XML content using XML::Twig
Message-Id: <eeeeffe6-c101-4ef6-af59-31f9a02113f6@11g2000yqr.googlegroups.com>
On 21 avr, 14:35, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
> Hello all,
> I'm trying to parse the XML using XML::Twig Module as my XML could be
> very large to handle using XML::Simple.
Klaus <klau...@gmail.com> wrote:
> However, let me bring in a shameless plug:
> You could also use my module XML::Reader
> http://search.cpan.org/~keichner/XML-Reader-0.32/lib/XML/Reader.pm
s...@netherlands.com wrote:
> > Indeed shameless.
> >
> > [...]
> >
> > It would be good though to have a capture mechanism, where
> > xml capture can be triggered on/off by the user, later to
> > be regurgitated to the user (on demand), and given to an
> > xml::simple style mechanism to turn it into filtered records.
Here is an example of how to use XML::Reader to capture sub-trees from
a (potentially very big) XML file into a buffer and pass that buffer
to XML::Simple:
use strict;
use warnings;
use XML::Reader;
my $rdr = XML::Reader->newhd(\*DATA, {filter => 3,
using => '/Data/ConnectionList/Connection/FileItemList/FileItem/
FileType'});
my $buffer = '';
while ($rdr->iterate) {
if ($rdr->path eq '/') {
if ($rdr->is_start) {
$buffer = qq{<?xml version="1.0" encoding="UTF-8"?
><FileType>};
}
if ($rdr->is_end) {
$buffer .= qq{</FileType>};
use XML::Simple;
use Data::Dumper;
my $ref = XMLin($buffer);
print Dumper($ref), "\n\n";
}
next;
}
if ($rdr->is_start) {
$buffer .= '<'.$rdr->tag.
join('', map{" $_='".$rdr->att_hash->{$_}."'"} sort keys %
{$rdr->att_hash}).
'>';
}
if ($rdr->type eq 'T' and $rdr->value ne '') {
$buffer .= $rdr->value;
}
if ($rdr->is_end) {
$buffer .= '</'.$rdr->tag.'>';
}
}
------------------------------
Date: Thu, 22 Apr 2010 02:08:24 -0700 (PDT)
From: Klaus <klaus03@gmail.com>
Subject: Re: Get XML content using XML::Twig
Message-Id: <b3bc4aaa-0761-4aac-ac7b-ae9eec6cb31b@k36g2000yqb.googlegroups.com>
On 21 avr, 14:35, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
> Hello all,
> I'm trying to parse the XML using XML::Twig Module as my XML could be
> very large to handle using XML::Simple.
On Wed, 21 Apr 2010 10:06:14, Klaus <klau...@gmail.com> wrote:
> What Tad McClellan and John Bokma suggested should be your first
> path of investigation.
> However, let me bring in a shameless plug:
> You could also use my module XML::Reader
> http://search.cpan.org/~keichner/XML-Reader-0.32/lib/XML/Reader.pm
On 21 avr, 20:07, s...@netherlands.com wrote:
> Indeed shameless.
On 22 avr, 10:24, alwaysonnet <kalyanrajsi...@gmail.com> wrote:
> My intention is to ~
> - Get each sender and receiver
> - Get the filetype ( could be InitTAP, FatalRAP etc )
> - For each of filetype get the TAPSeqNo, NoofCalls etc....
>
> Basically I want all the information in place for processing the
> data....
>
> Also, apart from XML::Twig, is there any module which can handle
> larger XML files..
As I said before, take the advice of Tad McClellan and John Bokma
first.
If, for whatever reason, you can't follow their advice, (and, for
whatever reason, you can't use XML::Twig either) there is always my
"shameless plug" XML::Reader:
There are, in my opinion, two scenarios:
Scenario 1:
You already know how to parse your XML with XML::Simple, but the XML
file is too big to fit entirely into memory.
In that case, I suggest you follow my example (with XML::Reader) that
I gave in this thread today (where I said: "...Here is an example of
how to use XML::Reader to capture sub-trees...)
see http://groups.google.com/group/comp.lang.perl.misc/msg/4bb3a769d96c1b2e
Scenario 2:
You know the general rules of your XML parsing, but you don't know
which XML module to use (and you can't follow the advice from Tad
McClellan and from John Bokma).
In that case I suggest you follow my example (with XML::Reader) that I
gave in this thread yesterday (where I said: "...use XML::Reader-
>newhd(... {filter => 2})...")
see http://groups.google.com/group/comp.lang.perl.misc/msg/762534f342f939e6
------------------------------
Date: Thu, 22 Apr 2010 10:34:54 +0100
From: RedGrittyBrick <RedGrittyBrick@spamweary.invalid>
Subject: Re: Get XML content using XML::Twig
Message-Id: <4bd0183f$0$2531$da0feed9@news.zen.co.uk>
On 22/04/2010 09:24, alwaysonnet wrote:
> On Apr 22, 12:39 pm, Klaus<klau...@gmail.com> wrote:
>>
>> [XML::Reader examples and discussion omitted]
>>
>
> My intention is to ~
>
> - Get each sender and receiver
> - Get the filetype ( could be InitTAP, FatalRAP etc )
> - For each of filetype get the TAPSeqNo, NoofCalls etc....
>
> Basically I want all the information in place for processing the
> data....
>
> Also, apart from XML::Twig, is there any module which can handle
> larger XML files..
Well there's the XML::Reader that Klaus has thoughtfully spent time
explaining and providing examples for. You didn't say whether there is
some reason you'd not use that.
>
> any help or suggestions are appreciated.
>
For very arge XML files, the obvious approach to consider is any SAX
parser. Perl SAX modules I've used before include XML::Parser and XML::SAX.
Have you Googled for "Perl SAX" and searched CPAN for SAX?
--
RGB
------------------------------
Date: Thu, 22 Apr 2010 10:44:16 +0100
From: RedGrittyBrick <RedGrittyBrick@spamweary.invalid>
Subject: Re: Get XML content using XML::Twig
Message-Id: <4bd01a71$0$2491$db0fefd9@news.zen.co.uk>
On 22/04/2010 10:34, RedGrittyBrick wrote:
> On 22/04/2010 09:24, alwaysonnet wrote:
>> On Apr 22, 12:39 pm, Klaus<klau...@gmail.com> wrote:
>>>
>>> [XML::Reader examples and discussion omitted]
>>>
>>
>> My intention is to ~
>>
>> - Get each sender and receiver
>> - Get the filetype ( could be InitTAP, FatalRAP etc )
>> - For each of filetype get the TAPSeqNo, NoofCalls etc....
>>
>> Basically I want all the information in place for processing the
>> data....
>>
>> Also, apart from XML::Twig, is there any module which can handle
>> larger XML files..
>
> Well there's the XML::Reader that Klaus has thoughtfully spent time
> explaining and providing examples for. You didn't say whether there is
> some reason you'd not use that.
>
>>
>> any help or suggestions are appreciated.
>>
>
> For very arge XML files, the obvious approach to consider is any SAX
> parser. Perl SAX modules I've used before include XML::Parser and XML::SAX.
>
> Have you Googled for "Perl SAX" and searched CPAN for SAX?
>
I recommend you read this
http://xmltwig.com/article/ways_to_rome/ways_to_rome.html
--
RGB
------------------------------
Date: Wed, 21 Apr 2010 23:24:38 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Trying to add exception handling, getting errors after adding Error.pm to path
Message-Id: <6ia4a7-scj2.ln1@osiris.mauzo.dyndns.org>
Quoth "david.karr" <davidmichaelkarr@gmail.com>:
> I'm trying to implement exception handling on operations calling
> SVN::Client. I noticed that Error.pm wasn't in my include path, so I
> looked for it (I'm on Cygwin), and I found it at the following
> locations:
>
> /usr/lib/perl5/5.10/CPANPLUS/Error.pm
> /usr/lib/perl5/vendor_perl/5.10/YAML/Error.pm
>
> So, I tried setting PERL5LIB to include that first directory. After
> adding that, I now get lots of errors, starting with this:
Don't do that then :). Those files are modules called (respectively)
CPANPLUS::Error and YAML::Error, not modules called Error. You need to
install Error from CPAN.
Ben
------------------------------
Date: Wed, 21 Apr 2010 16:55:15 -0700 (PDT)
From: "david.karr" <davidmichaelkarr@gmail.com>
Subject: Re: Trying to add exception handling, getting errors after adding Error.pm to path
Message-Id: <67c29bcf-2098-4aba-8ab7-d2a5949046ec@k36g2000yqb.googlegroups.com>
On Apr 21, 3:24=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth "david.karr" <davidmichaelk...@gmail.com>:
>
> > I'm trying to implement exception handling on operations calling
> > SVN::Client. I noticed that Error.pm wasn't in my include path, so I
> > looked for it (I'm on Cygwin), and I found it at the following
> > locations:
>
> > /usr/lib/perl5/5.10/CPANPLUS/Error.pm
> > /usr/lib/perl5/vendor_perl/5.10/YAML/Error.pm
>
> > So, I tried setting PERL5LIB to include that first directory. =A0After
> > adding that, I now get lots of errors, starting with this:
>
> Don't do that then :). Those files are modules called (respectively)
> CPANPLUS::Error and YAML::Error, not modules called Error. You need to
> install Error from CPAN.
>
> Ben
Bleah. Lots of installation errors. I'm going to try a different
tack.
------------------------------
Date: Wed, 21 Apr 2010 19:42:35 -0500
From: "Mumia W." <paduille.4061.mumia.w+nospam@earthlink.net>
Subject: Re: Trying to add exception handling, getting errors after adding Error.pm to path
Message-Id: <MKWdnQzgrZnjWlLWnZ2dnUVZ_soAAAAA@earthlink.com>
On 04/21/2010 06:55 PM, david.karr wrote:
> On Apr 21, 3:24 pm, Ben Morrow <b...@morrow.me.uk> wrote:
>> Don't do that then :). Those files are modules called (respectively)
>> CPANPLUS::Error and YAML::Error, not modules called Error. You need to
>> install Error from CPAN.
>>
>> Ben
>
> Bleah. Lots of installation errors. I'm going to try a different
> tack.
Most probably you can install "Error" through ActiveState's PPM utility.
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
Back issues are available via anonymous ftp from
ftp://cil-www.oce.orst.edu/pub/perl/old-digests.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 2918
***************************************