[30969] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 2214 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Tue Feb 17 00:09:41 2009

Date: Mon, 16 Feb 2009 21:09:07 -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           Mon, 16 Feb 2009     Volume: 11 Number: 2214

Today's topics:
    Re: Determine whether STDIN is a pipe? <amphetamachine@gmail.com>
    Re: Determine whether STDIN is a pipe? <spamtrap@dot-app.org>
    Re: how do I print the name and value of a scalar <tadmc@seesig.invalid>
    Re: how do I print the name and value of a scalar <devnull4711@web.de>
    Re: how do I print the name and value of a scalar <ben@morrow.me.uk>
    Re: how do I print the name and value of a scalar <cartercc@gmail.com>
    Re: how do I print the name and value of a scalar <cwilbur@chromatico.net>
    Re: how do I print the name and value of a scalar <cartercc@gmail.com>
    Re: how do I print the name and value of a scalar <cartercc@gmail.com>
    Re: Regexp discovery - using ^ with /m is a time sink <nospam-abuse@ilyaz.org>
    Re: time and place of satellite coincidence <larry@example.invalid>
    Re: time and place of satellite coincidence <larry@example.invalid>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

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

Date: Mon, 16 Feb 2009 14:59:49 -0800 (PST)
From: h3xx <amphetamachine@gmail.com>
Subject: Re: Determine whether STDIN is a pipe?
Message-Id: <93d9e258-280f-4137-bdc7-0f20084af040@r38g2000vbi.googlegroups.com>

On Feb 16, 12:27=A0pm, Sherm Pendley <spamt...@dot-app.org> wrote:
> h3xx <amphetamach...@gmail.com> writes:
> > Is there any way to test whether STDIN is going into a pipe?
>
> if (-t STDIN) {
> =A0 =A0 # It's a tty
>
> } else {
> =A0 =A0 # It's a pipe
> }
>
> See: perldoc -f -x
>
> sherm--
>
> --
> My blog:http://shermspace.blogspot.com
> Cocoa programming in Perl:http://camelbones.sourceforge.net

That works pretty well, but I think you mean "-t STDOUT". "-t STDIN"
seems to test for whether the INPUT is coming from a terminal. But
then again, I DID mix the two up in the subject line. Silly me.

Thanks a lot!


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

Date: Mon, 16 Feb 2009 23:25:35 -0500
From: Sherm Pendley <spamtrap@dot-app.org>
Subject: Re: Determine whether STDIN is a pipe?
Message-Id: <m1y6w5wuyo.fsf@dot-app.org>

h3xx <amphetamachine@gmail.com> writes:

> On Feb 16, 12:27 pm, Sherm Pendley <spamt...@dot-app.org> wrote:
>> h3xx <amphetamach...@gmail.com> writes:
>> > Is there any way to test whether STDIN is going into a pipe?
>>
>> if (-t STDIN) {
>>     # It's a tty
>>
>> } else {
>>     # It's a pipe
>> }
>>
>> See: perldoc -f -x
>
> That works pretty well, but I think you mean "-t STDOUT". "-t STDIN"
> seems to test for whether the INPUT is coming from a terminal. But
> then again, I DID mix the two up in the subject line.

And in the message body as well. :-)

No matter - it works with any filehandle.

sherm--

-- 
My blog: http://shermspace.blogspot.com
Cocoa programming in Perl: http://camelbones.sourceforge.net


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

Date: Mon, 16 Feb 2009 15:11:11 -0600
From: Tad J McClellan <tadmc@seesig.invalid>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <slrngpjljf.evg.tadmc@tadmc30.sbcglobal.net>

Charlton Wilbur <cwilbur@chromatico.net> wrote:

> You will save yourself a great deal of time and frustration if you think
> *first* and code *second*.


And all the congregation said "Amen"!


I started my professional career as an EE. I'd taken just enough
programming courses to be dangerous.

I eventually noticed that most of my (home) programming projects
would get to 80-90% complete, and then stall out, never to be completed.

After doing that enough times (I'm a slow learner), I eventually 
realized that I was not doing it right...

 ... I went back to school for a Software Engineering degree.

:-)


Giving careful thought to algorithms, data structures, modularity, etc
*before* starting coding may seem "wasteful" in your rush to 
"get the job done", but if you can muster the discipline to do so,
your software developments will take *less* time overall.


-- 
Tad McClellan
email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/"


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

Date: Tue, 17 Feb 2009 00:02:44 +0100
From: Frank Seitz <devnull4711@web.de>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <6vu9k9Fm1cueU1@mid.individual.net>

cartercc wrote:
> 
> 
> What I need is a way to get at the NAME of a variable as well as a
> value.

AFAIK it's not possible in Perl to get the name of a lexical (my) variable.

Frank
-- 
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


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

Date: Mon, 16 Feb 2009 23:17:49 +0000
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <tp8p66-fi5.ln1@osiris.mauzo.dyndns.org>


Quoth Frank Seitz <devnull4711@web.de>:
> cartercc wrote:
> > 
> > 
> > What I need is a way to get at the NAME of a variable as well as a
> > value.
> 
> AFAIK it's not possible in Perl to get the name of a lexical (my) variable.

You know wrong :). It's possible with PadWalker. Whether it's a good
idea is of course another matter (nearly always it isn't).

Ben



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

Date: Mon, 16 Feb 2009 18:37:49 -0800 (PST)
From: cartercc <cartercc@gmail.com>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <bf3e042e-4fb0-46b8-89e5-cbdc0bc9786f@x10g2000yqk.googlegroups.com>

On Feb 16, 8:51=A0am, cartercc <carte...@gmail.com> wrote:
> Given a list of scalars, such as:
> With the objective of producing output like this:
> <output>
> Variable names and values
> =A0* name =3D> John Smith
> =A0* address =3D> 1234 Easy Street
> =A0* city =3D> Paradise
> ...
> </output>

Guys, this is what I did. I added this subroutine to each of my
modules and added the function call to the top of each file. It works
and has proven to be very useful today, telling me which variables
have been declared but not assigned a value, and the values of those
that have them.

One of the problems is that this 'little app' did indeed start off
little, with about 50 LOC and about ten variables, but grew
incrementally to seven modules, about a hundred variables, and several
KLOCs. I just couldn't face changing the data structures or changing
the names of the variables, and besides, I had developed a semi-
automated process using REs to populate the variable arrays.

Here's the code I used for validating my solution:

my $name =3D 'John Smith';
my $address =3D '1234 Easy Street';
my $city =3D 'Paradise';
my $state;
my $zip;
my $email;
my @scalar_names =3D qw(name address city state zip email);

foreach my $element (@scalar_names)
{
   my $varval =3D '$'.$element;
   print " * $element =3D> ", eval $varval, "\n";
}


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

Date: Mon, 16 Feb 2009 22:48:08 -0500
From: Charlton Wilbur <cwilbur@chromatico.net>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <86ab8lrafb.fsf@mithril.chromatico.net>

>>>>> "cc" == cartercc  <cartercc@gmail.com> writes:

    cc> One of the problems is that this 'little app' did indeed start
    cc> off little, with about 50 LOC and about ten variables, but grew
    cc> incrementally to seven modules, about a hundred variables, and
    cc> several KLOCs. I just couldn't face changing the data structures
    cc> or changing the names of the variables, and besides, I had
    cc> developed a semi- automated process using REs to populate the
    cc> variable arrays.

The sooner you face this pain, the better off you will be.  Your mess of
a "solution" is going to cause you more trouble overall than biting the
bullet and actually fixing the problem would have.

There's a concept called "design debt."  It's what you accrue when you
do something in a quick and dirty way instead of a clean, sensible way.
You pay interest on it when you add new features, because you have to do
more work to get the new features to work on top of a kludgy base.  If
you keep on doing kludgy workarounds instead of fixing the problem,
eventually you'll be so swamped that you spend all your time keeping up
with the bad design decisions you made.  

Just as when you max out your credit cards and get three payday loans
to pay your living expenses, all of your income starts going to pay
interest.  The smart thing to do is to stop taking out new loans -- to
stop adding new workarounds for your earlier bad design decisions -- and
to accept the pain of not having any money while you pay off your debts.

You've had this explained to you at least twice so far in this group,
and it does not seem to have sunk in yet.  Perhaps the next time you
have a crisis programming experience, you'll reflect on this and the
light bulb will go on.  They say the third time is the charm, after all.

Charlton


-- 
Charlton Wilbur
cwilbur@chromatico.net


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

Date: Mon, 16 Feb 2009 20:25:11 -0800 (PST)
From: cartercc <cartercc@gmail.com>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <c9530d26-01fc-461b-9701-1df72cef7eff@e18g2000yqo.googlegroups.com>

On Feb 16, 10:48=A0pm, Charlton Wilbur <cwil...@chromatico.net> wrote:
> The sooner you face this pain, the better off you will be. =A0Your mess o=
f
> a "solution" is going to cause you more trouble overall than biting the
> bullet and actually fixing the problem would have.

This didn't start out like this. It started out as a quick and dirty
little solution to a little problem. It was a database problem and the
purpose was to clean up some data, and it was MY automation. When some
other people saw what a good thing it was, they went to my supervisor,
and my supervisor came to me, and over a period of time it just grew,
without any thought given to design and with no planning whatsoever.

> There's a concept called "design debt." =A0It's what you accrue when you
> do something in a quick and dirty way instead of a clean, sensible way.
> You pay interest on it when you add new features, because you have to do
> more work to get the new features to work on top of a kludgy base. =A0If
> you keep on doing kludgy workarounds instead of fixing the problem,
> eventually you'll be so swamped that you spend all your time keeping up
> with the bad design decisions you made. =A0

It's kind of hard to do when you explain this to my boss (which I did)
and ask for some time to redesign the whole thing from top to bottom
and do it right (which I did) and be told that it wasn't important
enough to do but to leave it alone. Unfortunately, the people I have
to work with aren't developers or designers and think that writing a
'little app' is more or less the same as writing up a PowerPoint for a
presentation. I was told this just a few days ago by someone WHO
KNOWS!

> Just as when you max out your credit cards and get three payday loans
> to pay your living expenses, all of your income starts going to pay
> interest. =A0The smart thing to do is to stop taking out new loans -- to
> stop adding new workarounds for your earlier bad design decisions -- and
> to accept the pain of not having any money while you pay off your debts.

I agree with 100%. Most of what I do is write scripts less than 50
lines, or between 50 and 100 lines, for my own purpose, and I write
these on the fly. Yeah, they are pretty crappy, but I can bang them
out in less than half an hour and it saves me hours of work. (I deal
with big data files, tens of thousands of records, and the norm before
I can to work here was to use Excel to manually manipulate the data.
Sometimes this can take a couple of days and the error rate is pretty
high.) There just isn't any percentage in spending several hours
designing something I can be through with in an hour from start to
finish.

> You've had this explained to you at least twice so far in this group,
> and it does not seem to have sunk in yet. =A0Perhaps the next time you
> have a crisis programming experience, you'll reflect on this and the
> light bulb will go on. =A0They say the third time is the charm, after all=
 .

Come talk to my boss, and his boss. I do my work on schedule and under
budget. My crisis experiences come from others when they come to me to
bail them out on a project that's already late and over budget, or to
fill in for someone who left yesterday for a two week vacation.

If I were a prophet and could foretell the monster around the corner,
I'd be all set. Do you have any advice on how to do this?

CC


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

Date: Mon, 16 Feb 2009 20:43:12 -0800 (PST)
From: cartercc <cartercc@gmail.com>
Subject: Re: how do I print the name and value of a scalar
Message-Id: <dbb2ee6a-49a8-4b96-a088-6b448e2bae3a@b16g2000yqb.googlegroups.com>

On Feb 16, 4:11=A0pm, Tad J McClellan <ta...@seesig.invalid> wrote:
> I started my professional career as an EE. I'd taken just enough
> programming courses to be dangerous.

I started my professional career as an attorney, and practiced law for
17 years before transitioning into IT. As an attorney, if you don't
plan your work, you will get eaten alive. I've been on both sides of
that equation, both eating and being eaten.

> After doing that enough times (I'm a slow learner), I eventually
> realized that I was not doing it right...

I, too, am a slow learner. I'm a bright guy, but it takes a long time
before something sinks in.

> ... I went back to school for a Software Engineering degree.

Likewise.

> :-)

:-)

>
> Giving careful thought to algorithms, data structures, modularity, etc
> *before* starting coding may seem "wasteful" in your rush to
> "get the job done", but if you can muster the discipline to do so,
> your software developments will take *less* time overall.

FWIW, this is my take.

(1) Make sure you have clear and measurable requirements. This is
difficult when the user doesn't know what he wants, but in my
experience, the biggest problems by far are caused by ambiguous or
unclear requirements.

(2) Plan and if possible write your tests BEFORE you start coding. I
learned this playing with Java, and when I can make my own schedule, I
write the tests before I write the code -- nothing fancy, just some
function calls with varied data and an output of the results. When my
tests produce the expected output, I can at least enjoy the illusion
of success if not the reality.

(3) Read the code. Read it line by line, carefully and thoroughly. I
frequently print out a hard copy of something I'm working on and take
it home to read through. I also like to read through it with another
person, one driving and the other navigating. It's surprising how many
mistakes you find simply by reading the code.

In the real world, you have to deal with unclear (or unknown!)
requirements, lack of time for proper testing, and no time to walk
through the code, but in my experience I have found that following
these three practices helps me create a little order out of chaos.

CC


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

Date: Mon, 16 Feb 2009 20:14:45 GMT
From: Ilya Zakharevich <nospam-abuse@ilyaz.org>
Subject: Re: Regexp discovery - using ^ with /m is a time sink
Message-Id: <slrngpji9l.19p.nospam-abuse@chorin.math.berkeley.edu>

On 2009-02-16, Koszalek Opalek <koszalekopalek@interia.pl> wrote:
> On Feb 15, 2:20 pm, Ilya Zakharevich <nospam-ab...@ilyaz.org> wrote:
>
>> I also found it by benchmarking.  Had no time to look into the
>> sources...
>
> Should I report this to perlbug@perl.org ?

You better do.  I discovered it profiling edits to FreezeThaw;

 the REx is /\G\$(\d+)\|/
 the string is a concatenation of 2N copies of $1000|;

one matches with pos() set at 6N (so it should match immediately: the
offset is known, the length is bounded, and even if it looks for
"floating anchor" [which is '|'], it is located very close, at offset
5).

  time perl -wle "($n,$c) = @ARGV; $s = q($1000|) x (2*$n); pos($s) = 6 * $n; $s =~ /\G\$(\d+)\|/ for 1..$c" 1e6 15

also run with 1e6 5, and 1e2 15.

It finishes with linear time in the second argument (as expected); but
the increment is much quickier with 1e2 than with 1e6, which I do not
think is a correct behaviour.

Thanks,
Ilya


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

Date: Mon, 16 Feb 2009 21:53:37 -0700
From: Larry Gates <larry@example.invalid>
Subject: Re: time and place of satellite coincidence
Message-Id: <1hhdpx3bifrmi.189k3g7m8saaz$.dlg@40tude.net>

On Mon, 16 Feb 2009 10:11:53 +0100, Peter J. Holzer wrote:

> On 2009-02-16 04:54, Larry Gates <larry@example.invalid> wrote:

>> Outside of basically not knowing my I failed here,
> 
> You forgot to declare the variables "$tag" and "$links_r".

I should recognize errors like that by now.:-(
> 
>> I have 2 other
>> questions.
>>
>> q1)  I didn't see look_down as a method in HTML::TreeBuilder, HTML::Element
> 
> Strange. I see it in HTML::Element (in section "Secondary Structural
> Methods", near line 800 when formatted for 80 chars/line).

Thanks for your response, Peter.  Programming in perl is very exacting as
far as one's attention to detail goes.  I wasn't sure if HTML::Element was
where I should be looking.  I dumped it as a tree today, and it's a fairly
large html page.
> 
>> and one other HTML::Something that I looked for it.  Where do I find a
>> definition of the look_down method?
> 
> It doesn't seem to be the problem here, but in general:
> 
> One of the primary techniques in object-oriented programming is
> inheritance. If class X is a subclass of class Y and class Y is a
> subclass of class Z, then X inherits all methods from Y and Z. Typically
> these methods are documented only once (in Y or Z - wherever they are
> defined), so for a complete documentation of X, you need to read all
> three perldocs. The documentation of X should mention that X is a
> subclass of Y and the documentation of Y should mention that Y is a
> subclass of Z, but sometimes that hint is missing or well hidden.

ok
> 
> 
>> q2)  I *still* have problems with control structures in perl.  Why does
>> this not print the index variable for the loop?
>>
> [...]
>> foreach my $elem ( $tree->look_down('_tag', 'center') ) {
>>
>>     print "%%\n", $elem;
>>     print $elem->as_text(), "\n";
>> }
> 
> There is no "index variable" in this example. There is the "loop variable"
> $elem, but it isn't an index in any sense of the word. 
> 
> If you mean $elem, that is printed just fine. Why do you think it isn't?
> 
> Or in other words:
> 
>  * What did you expect the output to be?

I don't know.

#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
use LWP::Simple;
use HTML::Element;


my $site_url = 'http://search.cpan.org/';
my $url_args = '~petek/HTML-Tree-3.23/lib/HTML/TreeBuilder.pm';
my $t = get "$site_url?$url_args" || "Problem";

my $tree1 = HTML::TreeBuilder->new_from_content($t);

print "this is one of the answer's to today's questions\n";
print $tree1, "\n";


#$tree1->dump;

$site_url = 'http://www.fourmilab.ch/cgi-bin/Yoursky';
$url_args = 'z=1&lat=35.0836&ns=North&lon=106.651&ew=West';
my $r = get "$site_url?$url_args" || "Problem";

my $tree2 = HTML::TreeBuilder->new_from_content($r);

# $tree2->dump;

my $i=0;

foreach my $elem ( $tree2->look_down('_tag', 'center') ) {
++ $i;
print "i is $i\n";
print "elem is $elem\n";

    print $elem->as_text(), "\n";
}

foreach my $elem ( $tree2->find_by_attribute('name', 'lat') ) {
print "****";
    print $elem->attr('value'), "\n";
}

# perl index12.pl >text42.txt

#end script begin output

C:\MinGW\source> perl index12.pl
this is one of the answer's to today's questions
HTML::TreeBuilder=HASH(0x1ada044)
i is 1
elem is HTML::Element=HASH(0x1af0660)
Sky above 35â–‘5'N 106â–‘39'3"W at Tue 2009 Feb 17 4:46 UTC
i is 2
elem is HTML::Element=HASH(0x1b0add8)
Explain symbols in the map.Click in map to aim telescope.View horizon at
this ob
serving site.
i is 3
elem is HTML::Element=HASH(0x1b0b18c)
Explain controls in the following panel.Date and Time Now Universal time:
Julian
 day:Observing Site Latitude:  North South Longitude:  East WestSet for
nearby c
ityDisplay Options Ecliptic and equator Moon and planets Deep sky objects
of mag
nitude  and brighter Constellations: áááááááá Outlines áááááááá Names
aligned wi
th horizon? áááááááá BoundariesStars: ááááááááShow stars brighter than
magnitude
  áááááááá Names for magnitude  and brighter  áááááááá Bayer/Flamsteed
codes for
 mag.  and brighter  Invert North and SouthImage size:  pixels Colour
scheme: Co
lourBlack on white backgroundWhite on black backgroundNight vision
(red)Asteroid
 andComet Tracking Paste orbital elements below:  Echo elements

i is 4
elem is HTML::Element=HASH(0x1b1add4)
Wide character in print at index12.pl line 36.
 RightAscensionDeclinationDistance(AU)From 35°5'N
106┬░39'3"W:AltitudeAzimuthS
un22h 3m 11s−11° 56.7'0.988−48.097113.831SetMercury20h 20m 24s−19°
40.9'
1.033−70.822140.046SetVenus0h 30m 17s+7°
42.0'0.444−7.305104.781SetMoon15h
55m 3s−25° 18.3'63.0 ER−43.384−86.854SetMars20h 49m 51s−18°
48.9'2.307
−65.757126.860SetJupiter20h 50m 18s−18°
12.4'6.024−65.240127.682SetSaturn
11h 26m 21s+6° 3.4'8.45328.323−76.580UpUranus23h 29m 4s−4°
8.1'21.007−26
 .625104.688SetNeptune21h 46m 11s−13°
49.3'31.018−52.469115.792SetPluto18h 1
0m 53s−17° 43.5'32.139−65.513−130.135Set
****35â–‘5'

C:\MinGW\source>

>  * What was the real output?
> 
> 	hp


It's a hash?
-- 
larry gates

Must be a different Larry Wall.  There are at least 137 of us in the U.S.
             -- Larry Wall in <199809300035.RAA12495@wall.org>


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

Date: Mon, 16 Feb 2009 22:04:32 -0700
From: Larry Gates <larry@example.invalid>
Subject: Re: time and place of satellite coincidence
Message-Id: <1ddzquuuke9oo.14a7qyen5hyaj$.dlg@40tude.net>

On Sat, 14 Feb 2009 04:32:54 -0700, Larry Gates wrote:

>>> This will get me the julian time from this point north and west of the
>>> cosmopolitan of yakutsk.  How do I instead, give IT the julian time from a
>>> perl script?
>> 
>> 
>>     perldoc -q form
>> 
>>         How do I automate an HTML form submission?
> 
>   How do I automate an HTML form submission?
>     If you are doing something complex, such as moving through many pages
>     and forms or a web site, you can use "WWW::Mechanize". See its
>     documentation for all the details.
> 
>     If you're submitting values using the GET method, create a URL and
>     encode the form using the "query_form" method:
> 
>         use LWP::Simple;
>         use URI::URL;
> 
>         my $url = url('http://www.perl.com/cgi-bin/cpan_mod');
>         $url->query_form(module => 'DB_File', readme => 1);
>         $content = get($url);

#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
use LWP::Simple;
use HTML::Element;
use URI::URL;

        my $url = url('http://www.perl.com/cgi-bin/cpan_mod');
        $url->query_form(module => 'DB_File', readme => 1);
   my     $content = get($url);
print $url;
# perl Uri1.pl

C:\MinGW\source> perl Uri1.pl
Global symbol "$content" requires explicit package name at Uri1.pl line 16.
Execution of Uri1.pl aborted due to compilation errors.

** I included this one to show that I caught my lack of a my here. ^^

C:\MinGW\source> perl Uri1.pl
http://www.perl.com/cgi-bin/cpan_mod?module=DB_File&readme=1
C:\MinGW\source>

It looks to me like we are simulating pressing buttons and adding values;
is that correct?
-- 
larry gates

Personally I'm looking forward to seeing what the .mathematica method
spits out for a junction, but maybe I'll have to settle for a .apl
method instead.
    -- Larry Wall in <20050216071655.GC3909@wall.org>


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

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


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