[29035] in Perl-Users-Digest
Perl-Users Digest, Issue: 279 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Mar 29 11:09:53 2007
Date: Thu, 29 Mar 2007 08:09:07 -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, 29 Mar 2007 Volume: 11 Number: 279
Today's topics:
handler functions marked as method <bol@adv.magwien.gv.at>
HowTo parse huge Files <cadetg@googlemail.com>
Re: HowTo parse huge Files <bugbear@trim_papermule.co.uk_trim>
Re: HowTo parse huge Files <cadetg@googlemail.com>
Re: HowTo parse huge Files <jue@monster-berlin.de>
Re: HowTo parse huge Files <uri@stemsystems.com>
Re: HowTo parse huge Files <glex_no-spam@qwest-spam-no.invalid>
multiple inheritance and instance data? <bugbear@trim_papermule.co.uk_trim>
Re: multiple inheritance and instance data? <Peter@PSDT.com>
Re: multiple inheritance and instance data? <abigail@abigail.be>
Re: multiple inheritance and instance data? <bugbear@trim_papermule.co.uk_trim>
Net::LDAP::Filter <h.b.furuseth@usit.uio.no>
new CPAN modules on Thu Mar 29 2007 (Randal Schwartz)
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Thu, 29 Mar 2007 16:01:58 +0200
From: "Ferry Bolhar" <bol@adv.magwien.gv.at>
Subject: handler functions marked as method
Message-Id: <1175176920.135159@proxy.dienste.wien.at>
Hi Perl folks,
in some of mod_perl 2.0 modules (e.g. ModPerl::PerlRun),
I've seen some 'handler' functions marked with the 'method'
attribute:
sub handler : method {...}
What does this actually mean? I doubt 'method' was used
in the threading model of Perl 5.005 only and is now obsolete.
But mod_perl 2.0 requires at least Perl 5.6, so the above
declaration would make no sense. So I'd guess there's
another reason for it.
So why and when one should declare a function as 'method'?
Kind greetings,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
------------------------------
Date: 29 Mar 2007 05:24:30 -0700
From: "cadetg@googlemail.com" <cadetg@googlemail.com>
Subject: HowTo parse huge Files
Message-Id: <1175171070.630366.108750@n59g2000hsh.googlegroups.com>
Dear Perl Monks, I am developing at the moment a script which has to
parse 20GB files. The files I have to parse are some logfiles. My
problem is that it takes ages to parse the files. I am doing something
like this:
my %lookingFor;
# keys => different name of one subset
# values => array of one subset
my $fh = new FileHandle "< largeLogFile.log";
while (<$fh>) {
foreach my $subset (keys %lookingFor) {
foreach my $item (@{$subset}) {
if (<$fh> =~ m/$item/) {
my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
$fh>;
}
}
}
I've already tried to speed it up by using the regExp flag=>o by doing
something like this:
$isSubSet=buildRegexp(@allSubSets);
while (<$fh>) {
foreach my $subset (keys %lookingFor) {
if (&$isSubSet(<$fh>)) {
my $writeFh = new FileHandle ">> myout.log";
print $writeFh <$fh>;
}
}
}
sub buildRegexp {
my @R = @_; my $expr = join '||', map { "\$_[0] =~ m/\(To\|is\)\\:\\S
\+\\@\$R[$_ +]/io" } ( 0..$#R );
my $matchsub = eval "sub { $expr }";
if ($@) { $logger->error("Failed in building regex @R: $@"); return
ERROR; }
$matchsub;
}
I don't know how to optimize this more. Maybe it would be possible to
do something with "map"? I think the "o" flag didn't speed it up at
all. Also I've tried to split the one big file into a few small ones
and use some forks childs to parse each of the small ones. Also this
didn't help.
Thanks a lot for your help!
Cheers
-Marco
------------------------------
Date: Thu, 29 Mar 2007 14:19:17 +0100
From: bugbear <bugbear@trim_papermule.co.uk_trim>
Subject: Re: HowTo parse huge Files
Message-Id: <460bbcd5$0$8741$ed2619ec@ptn-nntp-reader02.plus.net>
cadetg@googlemail.com wrote:
> Dear Perl Monks, I am developing at the moment a script which has to
> parse 20GB files. The files I have to parse are some logfiles. My
> problem is that it takes ages to parse the files. I am doing something
> like this:
>
> my %lookingFor;
> # keys => different name of one subset
> # values => array of one subset
>
> my $fh = new FileHandle "< largeLogFile.log";
> while (<$fh>) {
> foreach my $subset (keys %lookingFor) {
> foreach my $item (@{$subset}) {
> if (<$fh> =~ m/$item/) {
> my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
> $fh>;
> }
> }
> }
How many key-value pairs does %lookingFor (typically?) have?
BugBear
------------------------------
Date: 29 Mar 2007 07:02:25 -0700
From: "cadetg@googlemail.com" <cadetg@googlemail.com>
Subject: Re: HowTo parse huge Files
Message-Id: <1175176945.669754.20700@e65g2000hsc.googlegroups.com>
On 29 Mrz., 15:19, bugbear <bugbear@trim_papermule.co.uk_trim> wrote:
> cad...@googlemail.com wrote:
> > Dear Perl Monks, I am developing at the moment a script which has to
> > parse 20GB files. The files I have to parse are some logfiles. My
> > problem is that it takes ages to parse the files. I am doing something
> > like this:
>
> > my %lookingFor;
> > # keys => different name of one subset
> > # values => array of one subset
>
> > my $fh = new FileHandle "< largeLogFile.log";
> > while (<$fh>) {
> > foreach my $subset (keys %lookingFor) {
> > foreach my $item (@{$subset}) {
> > if (<$fh> =~ m/$item/) {
> > my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
> > $fh>;
> > }
> > }
> > }
>
> How many key-value pairs does %lookingFor (typically?) have?
>
> BugBear
The %lookingFor does maybe just have five key value pair but each
value is a reference to an array which is holding in average 20 items.
So in total that makes maybe 100 items for what I have to look for.
Cheers
-Marco
------------------------------
Date: 29 Mar 2007 07:20:49 -0700
From: "Thomas J." <jue@monster-berlin.de>
Subject: Re: HowTo parse huge Files
Message-Id: <1175178049.657421.112810@n59g2000hsh.googlegroups.com>
cadetg@googlemail.com schrieb:
>
> my %lookingFor;
> # keys => different name of one subset
> # values => array of one subset
>
> my $fh = new FileHandle "< largeLogFile.log";
> while (<$fh>) {
> foreach my $subset (keys %lookingFor) {
> foreach my $item (@{$subset}) {
> if (<$fh> =~ m/$item/) {
> my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
> $fh>;
> }
> }
> }
>
Your code will "copy" the following lines from "lagreLogFile.log"
after successful patternmatch into "myout.log"
This may be time-consuming... ...and possible not what you expected?
(use $_ instead of <$fh> in your "if" and in your "print")
REs may lead to "endless matching". Please show some samples.
study may/may_not help before patternmatching. (perldoc -f study)
Thomas
------------------------------
Date: Thu, 29 Mar 2007 09:50:37 -0500
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: HowTo parse huge Files
Message-Id: <x77it0drya.fsf@mail.sysarch.com>
>>>>> "cc" == cadetg@googlemail com <cadetg@googlemail.com> writes:
cc> Dear Perl Monks, I am developing at the moment a script which has to
cc> parse 20GB files. The files I have to parse are some logfiles. My
cc> problem is that it takes ages to parse the files. I am doing something
cc> like this:
this isn't perlmonks. that is a web site community. this is usenet.
cc> my %lookingFor;
cc> # keys => different name of one subset
cc> # values => array of one subset
cc> my $fh = new FileHandle "< largeLogFile.log";
FileHandle is an old and deprecated module. where did you learn to use
it? you can just do basic open as you don't need any OO here. also
ALWAYS check for errors on opens.
cc> while (<$fh>) {
don't use plain while to read lines. the proper idiom is:
while( my $line = <$fh> ) {
cc> foreach my $subset (keys %lookingFor) {
that makes no sense. keys are strings. they are not array refs. yet the
line below dereferences the key into an array. which means you are not
using strict and you are testing for wrong stuff.
cc> foreach my $item (@{$subset}) {
why the two loops? since you always look at all the items for each line,
factor out the items list to before the loops:
my @items = map @$_, values %lookingFor ;
cc> if (<$fh> =~ m/$item/) {
that is very wrong. it reads a new line in for each match in the
subset. the line from the while is in $_ at the moment.
cc> my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
cc> $fh>;
why are you opening the output file EACH time you want to print? just
open it before the loops and print to it. my previous advice on opens
applies here too.
cc> I've already tried to speed it up by using the regExp flag=>o by doing
cc> something like this:
forget speed for now. your code is broken. are getting any useful output
at all? i can't see how as you are looking for stuff with broken code.
uri
--
Uri Guttman ------ uri@stemsystems.com -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
------------------------------
Date: Thu, 29 Mar 2007 10:01:36 -0500
From: "J. Gleixner" <glex_no-spam@qwest-spam-no.invalid>
Subject: Re: HowTo parse huge Files
Message-Id: <460bd4d0$0$494$815e3792@news.qwest.net>
cadetg@googlemail.com wrote:
> Dear Perl Monks, I am developing at the moment a script which has to
> parse 20GB files. The files I have to parse are some logfiles. My
> problem is that it takes ages to parse the files. I am doing something
> like this:
You might be better off using a large egrep and/or by simplifying your
items. e.g. if your item contained 'abc' and 'abcd', you would only
have to search for 'abc'.
>
> my %lookingFor;
> # keys => different name of one subset
> # values => array of one subset
>
> my $fh = new FileHandle "< largeLogFile.log";
> while (<$fh>) {
> foreach my $subset (keys %lookingFor) {
> foreach my $item (@{$subset}) {
> if (<$fh> =~ m/$item/) {
> my $writeFh = new FileHandle ">> myout.log"; print $writeFh <
> $fh>;
> }
Open it once, before the while, and write $_, not <$fh>.
print $writeFh $_ if /$item/;
> }
> }
------------------------------
Date: Thu, 29 Mar 2007 14:12:54 +0100
From: bugbear <bugbear@trim_papermule.co.uk_trim>
Subject: multiple inheritance and instance data?
Message-Id: <460bbb56$0$8741$ed2619ec@ptn-nntp-reader02.plus.net>
I would like to have a class which has the behviour
of 2 more primitive classes.
I have read up on inheritance, and constructors.
I understand how the @ISA tree is traversed
to find methods.
http://perldoc.perl.org/perltoot.html
But I can't see, if BOTH parent classes
have constructors that return a blessed
object (e.g. a the typical hash reference),
what I'm meant to do in my child
class.
I think I'm just in trouble,
and that I'm up against a reasonable
limitation of Perl's object modelling,
but I would welcome any help
or insight.
BugBear
------------------------------
Date: Thu, 29 Mar 2007 14:07:53 GMT
From: Peter Scott <Peter@PSDT.com>
Subject: Re: multiple inheritance and instance data?
Message-Id: <pan.2007.03.29.14.07.51.839061@PSDT.com>
On Thu, 29 Mar 2007 14:12:54 +0100, bugbear wrote:
> I would like to have a class which has the behaviour
> of 2 more primitive classes.
[...]
> But I can't see, if BOTH parent classes
> have constructors that return a blessed
> object (e.g. a the typical hash reference),
> what I'm meant to do in my child
> class.
It's not that both parent constructors return blessed objects that's the
problem (what else would they do?).
It's whether the parent constructors do anything besides creating empty
blessed hashrefs.
That's why it's a best practice for constructors to create empty objects
and nothing else.
You write a constructor in the child that blesses an object into your
child class. Then you have to inspect the constructors of your parents to
see what they're doing. If they both follow best practice, you need do
nothing else. If one of them is well behaved and the other isn't, you can
instead call the constructor on the not-well-behaved one and then rebless
the returned object into your class. If they're both not well behaved,
you probably have to cut and paste.
This is one of the uglier things about Perl O-O.
--
Peter Scott
http://www.perlmedic.com/
http://www.perldebugged.com/
------------------------------
Date: 29 Mar 2007 14:32:32 GMT
From: Abigail <abigail@abigail.be>
Subject: Re: multiple inheritance and instance data?
Message-Id: <slrnf0njg0.c81.abigail@alexandra.abigail.be>
bugbear (bugbear@trim_papermule.co.uk_trim) wrote on MMMMCMLVIII
September MCMXCIII in <URL:news:460bbb56$0$8741$ed2619ec@ptn-nntp-reader02.plus.net>:
== I would like to have a class which has the behviour
== of 2 more primitive classes.
==
== I have read up on inheritance, and constructors.
==
== I understand how the @ISA tree is traversed
== to find methods.
==
== http://perldoc.perl.org/perltoot.html
==
== But I can't see, if BOTH parent classes
== have constructors that return a blessed
== object (e.g. a the typical hash reference),
== what I'm meant to do in my child
== class.
==
== I think I'm just in trouble,
== and that I'm up against a reasonable
== limitation of Perl's object modelling,
== but I would welcome any help
== or insight.
You are spot on.
And if you cannot control the implementation of the two classes you
want to inherit from, than chances are, you cannot do it.
Because most Perl programmers will *CONFIGURE* objects inside *CONSTRUCTORS*.
Which is bad.
Worse than using global variables.
Worse then leaving strict off.
Worse than using goto.
Worse than using Java.
Because with goto, and without strict, and with using global variables,
you can still write useable, reusable code. You can even write reusable
code in Java.
If you configure your objects in your constructor, you're a bad citizen.
Your code cannot be fully reused.
The answer: use inside-out objects, and don't configure your objects
inside the constructor.
Something like this (untested, will not even compile):
{
package Parent1;
use Scalar::Util 'refaddr';
my @ATTRIBUTES = \my (
%attr1,
%attr2,
);
sub DESTROY {
my $key = refaddr (my $self = shift);
delete $$_ {$key} for @ATTRIBUTES;
}
sub new {bless \do {my $var} => shift}
sub init {
my $key = refaddr (my $self = shift);
$attr1 {$key} = ...;
$attr2 {$key} = ...;
$self;
}
...
}
{
package Parent2;
use Scalar::Util 'refaddr';
my @ATTRIBUTES = \my (
%attr3,
%attr4,
);
sub DESTROY {
my $key = refaddr (my $self = shift);
delete $$_ {$key} for @ATTRIBUTES;
}
sub new {bless \do {my $var} => shift}
sub init {
my $key = refaddr (my $self = shift);
$attr3 {$key} = ...;
$attr4 {$key} = ...;
$self;
}
...
}
{
package Base;
use Scalar::Util 'refaddr';
our @ISA = qw [Parent1 Parent2];
my @ATTRIBUTES = \my (
%attr5,
%attr6,
);
sub DESTROY {
my $key = refaddr (my $self = shift);
delete $$_ {$key} for @ATTRIBUTES;
$self -> "${_}::DESTROY" for @ISA;
}
sub new {bless \do {my $var} => shift}
sub init {
my $key = refaddr (my $self = shift);
$self -> Parent1::init (...);
$self -> Parent2::init (...);
$attr5 {$key} = ...;
$attr6 {$key} = ...;
$self;
}
}
Abigail
--
package Just_another_Perl_Hacker; sub print {($_=$_[0])=~ s/_/ /g;
print } sub __PACKAGE__ { &
print ( __PACKAGE__)} &
__PACKAGE__
( )
------------------------------
Date: Thu, 29 Mar 2007 15:36:47 +0100
From: bugbear <bugbear@trim_papermule.co.uk_trim>
Subject: Re: multiple inheritance and instance data?
Message-Id: <460bcf00$0$8757$ed2619ec@ptn-nntp-reader02.plus.net>
Peter Scott wrote:
> On Thu, 29 Mar 2007 14:12:54 +0100, bugbear wrote:
>> I would like to have a class which has the behaviour
>> of 2 more primitive classes.
> [...]
>> But I can't see, if BOTH parent classes
>> have constructors that return a blessed
>> object (e.g. a the typical hash reference),
>> what I'm meant to do in my child
>> class.
>
> It's not that both parent constructors return blessed objects that's the
> problem (what else would they do?).
Yeah - I worked that out.
>
> It's whether the parent constructors do anything besides creating empty
> blessed hashrefs.
>
> That's why it's a best practice for constructors to create empty objects
> and nothing else.
But surely constructors should do "the right and useful" thing - otherwise
what are they for.
Failing that - how/where should "real" construction take place?
> You write a constructor in the child that blesses an object into your
> child class. Then you have to inspect the constructors of your parents to
> see what they're doing. If they both follow best practice, you need do
> nothing else. If one of them is well behaved and the other isn't, you can
> instead call the constructor on the not-well-behaved one and then rebless
> the returned object into your class. If they're both not well behaved,
> you probably have to cut and paste.
OK - my invention (while thinking about the issues) was as follows,
which seems to work (i.e. passes all the tests I've tried). I would
welcome comments on style or blatent
bugs/faults I haven't thought of. Essentially I perform
a hash merge on the parent hashes.
BugBear
#!/usr/bin/perl
use strict;
use Data::Dumper;
package A;
sub new {
my ($class, $name) = @_;
my $self = {};
$self->{a} = $name;
bless $self, $class;
return $self;
}
package B;
sub new {
my ($class, $name) = @_;
my $self = {};
$self->{b} = $name;
bless $self, $class;
return $self;
}
package C;
# single inheritance
use vars qw(@ISA);
@ISA = qw (A);
sub new {
my ($class, $name) = @_;
my $self = $class->SUPER::new("from C");
$self->{c} = "c";
bless $self, $class;
return $self;
}
package D;
use vars qw(@ISA);
@ISA = qw (A B);
sub new {
my ($class, $name) = @_;
my $selfa = new A($name);
my $selfb = new B($name);
my %merged = (%$selfa, %$selfb);
my $self = \%merged;
$self->{d} = "d";
bless $self, $class;
return $self;
}
package main;
use Data::Dumper;
my $a = new A("j1");
my $b = new B("j2");
my $c = new C("j3");
my $d = new D("j4");
print Dumper($a, $b, $c, $d);
print Dumper(UNIVERSAL::isa($d, "A"));
print Dumper(UNIVERSAL::isa($d, "B"));
print Dumper(UNIVERSAL::isa($d, "D"));
------------------------------
Date: Thu, 29 Mar 2007 11:20:40 +0200
From: Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
Subject: Net::LDAP::Filter
Message-Id: <hbf.20070329y9bk@bombur.uio.no>
The Net::LDAP::Filter manpage says those objects let me "directly
manipulate LDAP filters without worrying about the string representation
and all the associated escaping mechanisms." But I don't see how, or
what it helps for, at least not by using the documented interface.
The new and parse methods take a single string argument.
So how am I supposed to code
sub equalityMatch($$) { my($attr, $val); ... }
so e.g. equalityMatch("foo", "X*Y\0Z") returns "(foo=X\2aY\00Z)"?
This works, but is not documented:
my $filter = "($attr=x)";
$filter->{equalityMatch}{assertionValue} = $val;
return $filter->as_string
It seems simpler to me to just do
$val =~ s/([*()\\\0])/sprintf("\\%02x", ord($1))/eg;
return "($attr=$val)";
--
Hallvard
------------------------------
Date: Thu, 29 Mar 2007 04:42:08 GMT
From: merlyn@stonehenge.com (Randal Schwartz)
Subject: new CPAN modules on Thu Mar 29 2007
Message-Id: <JFnEE8.12qq@zorch.sf-bay.org>
The following modules have recently been added to or updated in the
Comprehensive Perl Archive Network (CPAN). You can install them using the
instructions in the 'perlmodinstall' page included with your Perl
distribution.
Catalyst-Engine-Apache-1.08
http://search.cpan.org/~agrundma/Catalyst-Engine-Apache-1.08/
Catalyst Apache Engines
----
Catalyst-Engine-Apache-1.09
http://search.cpan.org/~agrundma/Catalyst-Engine-Apache-1.09/
Catalyst Apache Engines
----
Catalyst-Model-S3-0.02
http://search.cpan.org/~dcardwell/Catalyst-Model-S3-0.02/
Catalyst model for Amazon's S3 web service
----
Catalyst-Model-S3-0.03
http://search.cpan.org/~dcardwell/Catalyst-Model-S3-0.03/
Catalyst model for Amazon's S3 web service
----
Class-CodeStyler-0.25
http://search.cpan.org/~gaffie/Class-CodeStyler-0.25/
Perl extension for code generation program formatting and execution.
----
Class-STL-Containers-0.34
http://search.cpan.org/~gaffie/Class-STL-Containers-0.34/
Perl extension for STL-like object management
----
Crypt-SSLeay-0.53_05
http://search.cpan.org/~dland/Crypt-SSLeay-0.53_05/
OpenSSL support for LWP
----
Data-Visitor-Encode-0.03
http://search.cpan.org/~dmaki/Data-Visitor-Encode-0.03/
Encode/Decode Values In A Structure
----
Data-Visitor-Encode-0.04
http://search.cpan.org/~dmaki/Data-Visitor-Encode-0.04/
Encode/Decode Values In A Structure
----
Devel-FileProfile-0.21
http://search.cpan.org/~muir/Devel-FileProfile-0.21/
----
HTML-Dojo-0.0402.0
http://search.cpan.org/~cfranks/HTML-Dojo-0.0402.0/
Provides the Dojo JavaScript / AJAX distribution 0.4.2 files.
----
IO-All-LWP-0.13
http://search.cpan.org/~itub/IO-All-LWP-0.13/
Extends IO::All to HTTP URLs
----
IO-Socket-SSL-1.04
http://search.cpan.org/~sullr/IO-Socket-SSL-1.04/
Nearly transparent SSL encapsulation for IO::Socket::INET.
----
Image-Embroidery-1.1
http://search.cpan.org/~kbaucom/Image-Embroidery-1.1/
Parse and display embroidery data files
----
JQuery-1.00
http://search.cpan.org/~peterg/JQuery-1.00/
Interface to Jquery, a language based on Javascript
----
JQuery-1.01
http://search.cpan.org/~peterg/JQuery-1.01/
Interface to Jquery, a language based on Javascript
----
JSON-XS-1.0
http://search.cpan.org/~mlehmann/JSON-XS-1.0/
JSON serialising/deserialising, done correctly and fast
----
Locale-Maketext-Gettext-1.21
http://search.cpan.org/~imacat/Locale-Maketext-Gettext-1.21/
Joins the gettext and Maketext frameworks
----
Locale-Maketext-Gettext-1.22
http://search.cpan.org/~imacat/Locale-Maketext-Gettext-1.22/
Joins the gettext and Maketext frameworks
----
Mac-PropertyList-SAX-0.07
http://search.cpan.org/~kulp/Mac-PropertyList-SAX-0.07/
work with Mac plists at a low level (with real XML parsers)
----
Mac-PropertyList-SAX-0.08
http://search.cpan.org/~kulp/Mac-PropertyList-SAX-0.08/
work with Mac plists at a low level (with real XML parsers)
----
Mac-PropertyList-SAX-0.09
http://search.cpan.org/~kulp/Mac-PropertyList-SAX-0.09/
work with Mac plists at a low level (with real XML parsers)
----
MasonX-StaticBuilder-0.04
http://search.cpan.org/~skud/MasonX-StaticBuilder-0.04/
Build a static website from Mason components
----
Module-Starter-1.43_01
http://search.cpan.org/~rjbs/Module-Starter-1.43_01/
a simple starter kit for any module
----
POE-Component-Server-SimpleSMTP-1.00
http://search.cpan.org/~bingos/POE-Component-Server-SimpleSMTP-1.00/
A simple to use POE SMTP Server.
----
Pod-S5-0.04
http://search.cpan.org/~tlinden/Pod-S5-0.04/
Generate S5 slideshow from POD source file.
----
Template-Provider-DBIC-0.02
http://search.cpan.org/~dcardwell/Template-Provider-DBIC-0.02/
Load templates using DBIx::Class
----
Template-Recall-0.04
http://search.cpan.org/~gilad/Template-Recall-0.04/
"Reverse callback" templating system
----
Test-Files-0.14
http://search.cpan.org/~philcrow/Test-Files-0.14/
A Test::Builder based module to ease testing with files and dirs
----
Test-Mail-0.06
http://search.cpan.org/~skud/Test-Mail-0.06/
Test framework for email applications
----
Tk-Wizard-2.002
http://search.cpan.org/~mthurn/Tk-Wizard-2.002/
GUI for step-by-step interactive logical process
----
Wx-Demo-0.07
http://search.cpan.org/~mbarbon/Wx-Demo-0.07/
the wxPerl demo
----
Yahoo-BBAuth-0.50
http://search.cpan.org/~jlev/Yahoo-BBAuth-0.50/
Perl interface to the Yahoo! Browser-Based Authentication.
If you're an author of one of these modules, please submit a detailed
announcement to comp.lang.perl.announce, and we'll pass it along.
This message was generated by a Perl program described in my Linux
Magazine column, which can be found on-line (along with more than
200 other freely available past column articles) at
http://www.stonehenge.com/merlyn/LinuxMag/col82.html
print "Just another Perl hacker," # the original
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 279
**************************************