[31527] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 2786 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Sun Jan 24 11:09:29 2010

Date: Sun, 24 Jan 2010 08:09:06 -0800 (PST)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)

Perl-Users Digest           Sun, 24 Jan 2010     Volume: 11 Number: 2786

Today's topics:
    Re: (La)TeX books <whynot@pozharski.name>
    Re: (La)TeX books <michal@gortel.phys.ualberta.ca>
    Re: How to dissect a Regexp object? <no.email@please.post>
    Re: How to dissect a Regexp object? <m@rtij.nl.invlalid>
    Re: How to dissect a Regexp object? sln@netherlands.com
        open pragma appears to have no effect <burner@imf.au.dk>
    Re: open pragma appears to have no effect <burner+usenet@imf.au.dk>
    Re: User-defined substitution <ben@morrow.me.uk>
    Re: User-defined substitution sln@netherlands.com
    Re: User-defined substitution <hjp-usenet2@hjp.at>
    Re: User-defined substitution <hjp-usenet2@hjp.at>
    Re: writing to terminal even with STDOUT and STDERR red <dilbert1999@gmail.com>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

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

Date: Sat, 23 Jan 2010 13:57:08 +0200
From: Eric Pozharski <whynot@pozharski.name>
Subject: Re: (La)TeX books
Message-Id: <slrnhllp0k.r25.whynot@orphan.zombinet>

with <87y6jq59lm.fsf_-_@castleamber.com> John Bokma wrote:
> Eric Pozharski <whynot@pozharski.name> writes:
>
>> I'm afraid that Lamport's book is quiet valuable but somewhat
>> outdated.
>
> Any tips on more up to date book(s)?

No tips, no books.  Books that I've ever spotted (either online or
offline) cover *typesetting* but *programming*.  When I'd asked myself
I've got no answer.  FAQ -> google -> comp.text.tex.  I don't LaTeX, I
just typeset.  Probably I could TeX but that doesn't help with LaTeX (of
any kind) anyway.

-- 
Torvalds' goal for Linux is very simple: World Domination
Stallman's goal for GNU is even simpler: Freedom


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

Date: Sat, 23 Jan 2010 23:29:24 +0000 (UTC)
From: Michal Jaegermann <michal@gortel.phys.ualberta.ca>
Subject: Re: (La)TeX books
Message-Id: <hjg0ok$rur$1@tabloid.srv.ualberta.ca>

John Bokma <john@castleamber.com> wrote:
> Eric Pozharski <whynot@pozharski.name> writes:
> 
>> I'm afraid that Lamport's book is quiet valuable but somewhat
>> outdated.
> 
> Any tips on more up to date book(s)?

http://www.tug.org/books/

It very much depends on what are your goals.
Guide to LaTeX, 4th Edition by Helmut Kopka and Patrick W. Daly and/or
The LaTeX Companion, 2nd Edition by Frank Mittelbach, Michel Goossens,
Johannes Braams, David Carlisle, and Chris Rowley are usually very
helpful. See also http://www.tug.org/interest.html#doc. Quite a lot of
items (including books) listed there, like
http://eijkhout.net/texbytopic/texbytopic.html, is freely available.

If you want something on typesetting in general then get yourself, among
other things, a documentation for 'memoir' class.  It is a book in
itself.

  Michal
> 


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

Date: Sat, 23 Jan 2010 22:49:04 +0000 (UTC)
From: kj <no.email@please.post>
Subject: Re: How to dissect a Regexp object?
Message-Id: <hjfud0$dsn$1@reader1.panix.com>

In <0t1ll5t3n1aaohh10q3isr9kgglg7ugfn8@4ax.com> sln@netherlands.com writes:

>On Fri, 22 Jan 2010 17:54:49 +0000 (UTC), kj <no.email@please.post> wrote:

>>Is there a way to tell if a given Regexp object, generated at
>>runtime, includes at least one pair of capture parentheses?
>>
>>More generally, is there any documentation for the Regexp class?
>>(I'm referring to the class alluded to by the output of, e.g., ref
>>qr//).  Running perldoc Regexp fails ("no docs found"), and perldoc
>>perlre does not say much at all about this class as such.
>>
>>TIA!
>>
>>Kynn

>Its not too hard to analyse the string returned by qr//
>to get the start (and thereby the count) of capture groups.
>To get the actual group text requires some recursion and thought.

> use strict;
> use warnings;

> my $tmp = qr/\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\))/x;
> my @capt;

> while ($tmp =~ /( (?<!\\)\((?!\?) )/xg ) {
>	push @capt, pos($tmp);
> }
> print "$tmp\n";
> my ($i,$last) = (1,1);

> for my $p (@capt) {
>	print (' 'x ($p - $last), $i++ % 10);
>	$last = $p+1;
> }
> print "\nFound ",scalar @capt, " capture groups\n";
> 
>__END__

>(?x-ism:\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\)))
>               1 2   3 4   5 6      7       8 9   0 1
>Found 11 capture groups


Thanks for this code!  Now I must study it.

~K



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

Date: Sun, 24 Jan 2010 07:42:40 +0100
From: Martijn Lievaart <m@rtij.nl.invlalid>
Subject: Re: How to dissect a Regexp object?
Message-Id: <0o6t27-ati.ln1@news.rtij.nl>

On Fri, 22 Jan 2010 21:29:30 -0800, sln wrote:

> Its not too hard to analyse the string returned by qr// to get the start
> (and thereby the count) of capture groups. To get the actual group text
> requires some recursion and thought.
> 
>  use strict;
>  use warnings;
> 
>  my $tmp = qr/\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\))/x; my
>  @capt;
> 
>  while ($tmp =~ /( (?<!\\)\((?!\?) )/xg ) {
> 	push @capt, pos($tmp);
>  }
>  print "$tmp\n";
>  my ($i,$last) = (1,1);
> 
>  for my $p (@capt) {
> 	print (' 'x ($p - $last), $i++ % 10); $last = $p+1;
>  }
>  print "\nFound ",scalar @capt, " capture groups\n";
>  
> __END__
> 
> (?x-ism:\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\)))
>                1 2   3 4   5 6      7       8 9   0 1
> Found 11 capture groups

I think this will fail on the regexp /\\(.)/.

M4


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

Date: Sun, 24 Jan 2010 07:18:59 -0800
From: sln@netherlands.com
Subject: Re: How to dissect a Regexp object?
Message-Id: <70pol5lso6n9chveqfajkd9majp1n6f5ev@4ax.com>

On Sun, 24 Jan 2010 07:42:40 +0100, Martijn Lievaart <m@rtij.nl.invlalid> wrote:

>On Fri, 22 Jan 2010 21:29:30 -0800, sln wrote:
>
>> Its not too hard to analyse the string returned by qr// to get the start
>> (and thereby the count) of capture groups. To get the actual group text
>> requires some recursion and thought.
>> 
>>  use strict;
>>  use warnings;
>> 
>>  my $tmp = qr/\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\))/x; my
>>  @capt;
>> 
>>  while ($tmp =~ /( (?<!\\)\((?!\?) )/xg ) {
>> 	push @capt, pos($tmp);
>>  }
>>  print "$tmp\n";
>>  my ($i,$last) = (1,1);
>> 
>>  for my $p (@capt) {
>> 	print (' 'x ($p - $last), $i++ % 10); $last = $p+1;
>>  }
>>  print "\nFound ",scalar @capt, " capture groups\n";
>>  
>> __END__
>> 
>> (?x-ism:\(\$th (i(s))(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\)))
>>                1 2   3 4   5 6      7       8 9   0 1
>> Found 11 capture groups
>
>I think this will fail on the regexp /\\(.)/.
>
>M4

Correct. Inserting (?:\\.)* should fix it.
See if this will fail on anything.

-sln

 use strict;
 use warnings;

 my $tmp = qr/\(\$th(\\(?:.) \\(.\) \\\(.)(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\)))/x;
 my @capt;

 # /(?<!\\)(?:\\.)*\((?!\?)/
 # -------------------------
 my $grprx = qr/
         (?<!\\)   # Not an escape behind us
         (?:\\.)*  # 0 or more escape + any char
         \(        # (
         (?!\?)    # Not a ? in front of us
   /x;

 while ($tmp =~ /($grprx)/g ) {
	# print "'$1'\n";
	push @capt, pos($tmp);
 }
 print "$tmp\n";
 my ($i,$last) = (1,1);

 for my $p (@capt) {
	print (' 'x ($p - $last), $i++ % 10);
	$last = $p+1;
 }
 print "\nFound ",scalar @capt, " capture groups\n";
 
__END__

(?x-ism:\(\$th(\\(?:.) \\(.\) \\\(.)(i(s))(i(s))(?:(i\(s)\)(i(s))(i(s))\))))
              1          2          3 4   5 6      7       8 9   0 1
Found 11 capture groups



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

Date: Sun, 24 Jan 2010 13:04:02 +0100
From: Rasmus Villemoes <burner@imf.au.dk>
Subject: open pragma appears to have no effect
Message-Id: <u0lfx5vu2tp.fsf@orc10.imf.au.dk>

Hi group

I am having trouble with the open pragma. If I understand "perldoc
open", I should be able to set the default output mode to utf8 by
saying "open OUT => ':utf8';". However, it seems that I still need to
explicitly append :utf8 when openening a file for output. It is far
more likely that there is something I have misunderstood...

=== utf8test.pl ===
#!/usr/bin/perl

use strict;
use warnings;

use open OUT => ':utf8';

use encoding 'utf8';

use Devel::Peek;

use HTML::Entities;

my $html = 'N&oslash;rre All&eacute;';

#Dump($html);
decode_entities($html);
Dump($html);
open T, '>', 't1.txt';
print T "$html\n";
close T;

open T, '>:utf8', 't2.txt';
print T "$html\n";
close T;
=== end ===

This is the output I get:

$ ./utf8test.pl && file t*.txt && ls -l t*.txt
SV = PV(0x1801660) at 0x180c720
  REFCNT = 1
  FLAGS = (PADBUSY,PADMY,POK,pPOK,UTF8)
  PV = 0x301f90 "N\303\270rre All\303\251"\0 [UTF8 "N\x{f8}rre All\x{e9}"]
  CUR = 12
  LEN = 25
t1.txt: ISO-8859 text
t2.txt: UTF-8 Unicode text
-rw-------   1 burner  burner  11 Jan 24 12:27 t1.txt
-rw-------   1 burner  burner  13 Jan 24 12:27 t2.txt


It doesn't matter if I remove the "use open". If I remove "use
encoding", the only difference is that $html doesn't have a UTF8 flag
(but t2.txt still is valid utf8). Interestingly, if I Dump $html
before the decode_entities, the second Dump produces a few more lines
("MAGIC" stuff).

I have $LANG = da_DK.iso8859-1 and "This is perl, v5.8.6 built for
darwin-thread-multi-2level".

-- 
Rasmus Villemoes
<http://rasmusvillemoes.dk/>


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

Date: Sun, 24 Jan 2010 15:02:21 +0100
From: Rasmus Villemoes <burner+usenet@imf.au.dk>
Subject: Re: open pragma appears to have no effect
Message-Id: <u0leilf1tzm.fsf@orc10.imf.au.dk>

Rasmus Villemoes <burner@imf.au.dk> writes:

> open T, '>', 't1.txt';
> print T "$html\n";
> close T;

A little further experimentation shows that if I change to the
two-argument form "open T, '>t1.txt';" I do get UTF-8.

-- 
Rasmus Villemoes
<http://rasmusvillemoes.dk/>


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

Date: Sat, 23 Jan 2010 17:56:02 +0000
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: User-defined substitution
Message-Id: <iqpr27-93m2.ln1@osiris.mauzo.dyndns.org>


Quoth "Peter J. Holzer" <hjp-usenet2@hjp.at>:
> On 2010-01-22 23:17, Ben Morrow <ben@morrow.me.uk> wrote:
> >
> > I don't think this behaviour is documented. That is, AIUI
> > ${^{PRE,POST}MATCH} should be considered undefined (in the C sense, not
> > the Perl sense) after a match which didn't specify /p.
> 
> I think you are right. I'm not sure if this is intentional but the
> wording in perlvar allows a match to clobber ${^{PRE,POST}MATCH} even if
> no /p is present.

IIRC Yves Orton said on p5p that it was intentionally undocumented, to
allow for possible optimizations later.

> That's easily fixed.

Yes.

Ben



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

Date: Sat, 23 Jan 2010 11:58:13 -0800
From: sln@netherlands.com
Subject: Re: User-defined substitution
Message-Id: <ckjml5pjr1navcjh8q369ki3isqjqoroeg@4ax.com>

On Sat, 23 Jan 2010 13:31:55 +0100, "Peter J. Holzer" <hjp-usenet2@hjp.at> wrote:

>On 2010-01-22 17:54, sln@netherlands.com <sln@netherlands.com> wrote:
>> On Fri, 22 Jan 2010 16:01:25 +0100, "Peter J. Holzer" <hjp-usenet2@hjp.at> wrote:
>>
>>>The function should do the same as
>>>    $string =~ s/$pattern/$replacement/;
>>>except that $<number> references to capture buffers are resolved, too.
>>>
>>
>> I don't know what you are trying to resolve re:
>>     "except that $<number> references to capture buffers are resolved, too."
>
>Consider:
>    $string = 'foo';
>    $pattern = '(f)(o)';
>    $replacement = '$2$1';
>    $string =~ s/$pattern/$replacement/;
>versus
>    $string =~ s/$pattern/$2$1/;
>
>In the first case the result is '$2$1o', in the second it is 'ofo'. I
>want the second behaviour, i.e., I want to replace $<number> patterns
>with the contents of the corresponding capture buffers.
>
>But I noticed a more serious error.
>
>The substitutions need to be performed in a strictly left to right
>manner. Adding Ben's suggestions and support for \ escapes at the same
>time I get:
>
>sub replace2 {
>    my ($string, $pattern, $replacement) = @_;
>
>    if (my @m = $string =~ m/$pattern/p) {
>        my ($prematch, $postmatch) = (${^PREMATCH}, ${^POSTMATCH});
>        if ($#+) {
>            my $new = "";
>            for (split(/(\$\d+|\\.)/, $replacement)) {
>                if (/^\$(\d+)/) {
>                    $new .= $m[$1-1];

                   $new .= $m[$1-1] // '';
Else that uninitialized value warning might show up.
// '' is an option or // $_

>                } elsif (/\\(.)/) {
>                    $new .= $1;
>                } else {
>                    $new .= $_;
>                }
>            }
>            $replacement = $new;
>        }
>        return $prematch . $replacement . $postmatch;
>    } else {
>        return $string;
>    }
>}
>
>So it gets more complicated, not simpler as I hoped :-/.
>
Yes, but this works fairly well.
>
>> It remains to be seen wheather the above $Str,$Pat,$Rep can actually
>> get in this form via console though.
>
>I see no reason to disallow them.
>
I guess what I was saying was that you still have to deal with
interpolation from the console, even if its just single quote \\
sequence's.
Pattern and replacement \\ can get ugly in strings, especially the
even odd situation.

Its not like:
  $repl = '\\\$1\$1';
  $str =~ s/c/$repl/;
    vs
  $str =~ s/c/\\\$1\$1/;

>Case conversion might also be useful, so maybe I'll add support for \U,
>\L, etc. later. That should fit well into the inner if/elsif cascade.
>
>> Its hard to imagine this could be safely made robust
>> for command line usage.
>
>I'm sure it can be made safe and I think it already is.
>
>	hp

I really meant the case that $Pattern is actually running
in a regex and may run afoul when the expression is parsed -
 "Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE"
Somehow this could be trapped? Don't know.

There are probably other gotcha's in this process.
But it looks like you taken this farther than I'd seen anybody
else. It would be nice to see native Perl support for this.
Replacement has always been an issue in the past.

-sln


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

Date: Sun, 24 Jan 2010 13:21:28 +0100
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: User-defined substitution
Message-Id: <slrnhloeq8.rnf.hjp-usenet2@hrunkner.hjp.at>

On 2010-01-23 12:42, Uri Guttman <uri@StemSystems.com> wrote:
>>>>>> "PJH" == Peter J Holzer <hjp-usenet2@hjp.at> writes:
>
>  PJH> Consider:
>  PJH>     $string = 'foo';
>  PJH>     $pattern = '(f)(o)';
>  PJH>     $replacement = '$2$1';
>  PJH>     $string =~ s/$pattern/$replacement/;
>  PJH> versus
>  PJH>     $string =~ s/$pattern/$2$1/;
>
>  PJH> In the first case the result is '$2$1o', in the second it is 'ofo'. I
>  PJH> want the second behaviour, i.e., I want to replace $<number> patterns
>  PJH> with the contents of the corresponding capture buffers.
>
> you can't do that directly with $replacement.

Yes, that's why I simulate it with explicit substitutions. I just
explained the *effect* I want to achieve.

> a /e would probably do it.

Not directly.

> why not parse out the $1 yourself

Actually, that's what I do.

> and replace it with a substr using
> indexes @- and @+? not too hard to do if you don't care about checking
> for escaped $'s. even that isn't too much work.
>
>  PJH> sub replace2 {
>  PJH>     my ($string, $pattern, $replacement) = @_;
>
>  PJH>     if (my @m = $string =~ m/$pattern/p) {
>  PJH>         my ($prematch, $postmatch) = (${^PREMATCH}, ${^POSTMATCH});
>  PJH>         if ($#+) {
>  PJH>             my $new = "";
>  PJH>             for (split(/(\$\d+|\\.)/, $replacement)) {
>  PJH>                 if (/^\$(\d+)/) {
>  PJH>                     $new .= $m[$1-1];
>  PJH>                 } elsif (/\\(.)/) {
>  PJH>                     $new .= $1;
>  PJH>                 } else {
>  PJH>                     $new .= $_;
>  PJH>                 }
>  PJH>             }
>  PJH>             $replacement = $new;
>  PJH>         }
>  PJH>         return $prematch . $replacement . $postmatch;
>  PJH>     } else {
>  PJH>         return $string;
>  PJH>     }
>
> that all seems way too complicated to me. here is my above idea in VERY
> rough logic:
>
> 	do the match as you do now.
>
> 	copy @- and @+ so you don't clobber them in the s///
> 	parse the replacement for $1 and do an s/// on that with /e
>
>
> 	$replacement =~ s/$(\d+)/substr( $orig_str, $beg[$1], $end[$1] )/eg ;

That can be simplified to 

	$replacement =~ s/$(\d+)/$m[$1-1])/eg ;

(except that it behaves differently for $0)

So that's a better solution to my original problem. But the addition of
\-escapes makes it a bit more complicated. I could use:

    $replacement =~ s/$(\d+)|\\(.)/defined $1 ? $m[$1-1] : $2/eg;

but that's not much more simple than the explicit loop above and it's
not obvious how to extend that to handling \U and friends.


> that's the idea. it needs cleaning up and testing. it really is a simple
> templater when you look at it. so this brings up another idea. why not
> create your own simpler syntax for the grabs and parse them out yourself
> and do something like the above? 

I try to avoid inventing my own syntax for functionality that already
exists. There are already way too many slightly incompatible search and
replace variants in the world. Unless I can come up with something which
is a lot better I'd like to stick to something which at least some of my
users are already familiar with.

>  PJH> I'm sure it can be made safe and I think it already is.
>
> my idea is safe as it never executes any user code, just does matching
> and replacements later.

Yup.

	hp



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

Date: Sun, 24 Jan 2010 13:41:20 +0100
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: User-defined substitution
Message-Id: <slrnhlofvi.rnf.hjp-usenet2@hrunkner.hjp.at>

On 2010-01-23 19:58, sln@netherlands.com <sln@netherlands.com> wrote:
> On Sat, 23 Jan 2010 13:31:55 +0100, "Peter J. Holzer" <hjp-usenet2@hjp.at> wrote:
>>On 2010-01-22 17:54, sln@netherlands.com <sln@netherlands.com> wrote:
>>> On Fri, 22 Jan 2010 16:01:25 +0100, "Peter J. Holzer" <hjp-usenet2@hjp.at> wrote:
>>    if (my @m = $string =~ m/$pattern/p) {
[...]
>>                    $new .= $m[$1-1];
>
>                    $new .= $m[$1-1] // '';
> Else that uninitialized value warning might show up.
> // '' is an option or // $_

I think you should be warned if you try to reference an undefined
capture buffer. That's a feature, not a bug.


>>> It remains to be seen wheather the above $Str,$Pat,$Rep can actually
>>> get in this form via console though.
>>
>>I see no reason to disallow them.
>>
> I guess what I was saying was that you still have to deal with
> interpolation from the console, even if its just single quote \\
> sequence's.

I don't know what console you are using, but mine doesn't interpolate
any printable characters[1]. 

> Pattern and replacement \\ can get ugly in strings, especially the
> even odd situation.
>
> Its not like:
>   $repl = '\\\$1\$1';
>   $str =~ s/c/$repl/;
>     vs
>   $str =~ s/c/\\\$1\$1/;

This is a property of the Perl syntax. It doesn't have anything to do
with the console.


>>Case conversion might also be useful, so maybe I'll add support for \U,
>>\L, etc. later. That should fit well into the inner if/elsif cascade.
>>
>>> Its hard to imagine this could be safely made robust
>>> for command line usage.
>>
>>I'm sure it can be made safe and I think it already is.
>>
>>	hp
>
> I really meant the case that $Pattern is actually running
> in a regex and may run afoul when the expression is parsed -
>  "Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE"
> Somehow this could be trapped? Don't know.

That's not what I meant by "safe". In this case the user will get an
error message and needs to fix the problem. The program would be
"unsafe" it it allowed the user to do something which he isn't meant do
do (access data with somebody else's privilges, run arbitrary code, etc.
I probably should have used the word "secure" instead of "safe").

	hp

[1] Actually, on HP-UX, serial consoles and telnet sessions start with
    erase and kill set to '#' and '@' respectively. Which is highly
    annoying, especially if you have used one of these characters in
    your password, so don't do that ;-).



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

Date: Sun, 24 Jan 2010 01:28:05 -0800 (PST)
From: Dilbert <dilbert1999@gmail.com>
Subject: Re: writing to terminal even with STDOUT and STDERR redirected
Message-Id: <44748c64-7898-4e3c-8782-48f3e915c2cc@v25g2000yqk.googlegroups.com>

> On Jan 22, 9:31=A0am, Dilbert <dilbert1...@gmail.com> wrote:
> > Is there a way inside "second.pl" to magically open a filehandle to
> > the terminal, even though STDOUT and STDERR are both redirected ?
> > I'm working under Ubuntu Linux.

On 22 jan, 21:49, Martijn Lievaart <m...@rtij.nl.invlalid> wrote:
On 22 jan, 23:20, "Mumia W." <paduille.4061.mumia.w
+nos...@earthlink.net> wrote:
On 23 jan, 01:27, Ilya Zakharevich <nospam-ab...@ilyaz.org> wrote:
On 23 jan, 01:46, "C.DeRykus" <dery...@gmail.com> wrote:
On 23 jan, 02:13, Ben Morrow <b...@morrow.me.uk> wrote:

Thanks to everyone who replied, there are a lot of good suggestions I
can go through for my problem.


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

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


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