[29080] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 324 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Apr 11 16:14:26 2007

Date: Wed, 11 Apr 2007 13:14:19 -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           Wed, 11 Apr 2007     Volume: 11 Number: 324

Today's topics:
        My script to download YouTube videos (critique wanted) <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <someone@example.com>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want <jurgenex@hotmail.com>
    Re: My script to download YouTube videos (critique want <cwilbur@chromatico.net>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want <uri@stemsystems.com>
    Re: My script to download YouTube videos (critique want <spamtrap@dot-app.org>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <ignoramus13850@NOSPAM.13850.invalid>
    Re: My script to download YouTube videos (critique want <purlgurl@purlgurl.net>
    Re: My script to download YouTube videos (critique want usenet@DavidFilmer.com
    Re: My script to download YouTube videos (critique want <uri@stemsystems.com>
    Re: Problems Binding Parameters for Stored Procedure <geoffrobinson@gmail.com>
    Re: Regular expression <tony_curtis32@yahoo.com>
    Re: Regular expression <jurgenex@hotmail.com>
        Script to know who clicked a link? <premgrps@gmail.com>
    Re: Script to know who clicked a link? usenet@DavidFilmer.com
    Re: Script to know who clicked a link? <premgrps@gmail.com>
    Re: Script to know who clicked a link? <purlgurl@purlgurl.net>
        Toggle between hot filehandles question <awkster@yahoo.com>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

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

Date: Wed, 11 Apr 2007 11:28:41 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: My script to download YouTube videos (critique wanted)
Message-Id: <YvqdndapfdAkkYDbnZ2dnUVZ_qKqnZ2d@giganews.com>

Plz critique...

#!/usr/bin/perl

# This is a script to download AVIs for YouTube videos, maybe for
# watching later on laptop or just adding them to your video library.
# 
# It works by giving it IDs or URLs of YouTube videos (it figures out
# IDs from URLs as URLs are easier to copy/paste into command line). 
# 
# Example: 
# 
# $ YouTube http://youtube.com/watch?v=Svbcwx6FZPA sXzmXy226po i7DcvMrNXCk
# 
# would load videos Svbcwx6FZPA sXzmXy226po i7DcvMrNXCk
# 
# Copyright(C) Igor Chudov, 2007. All Rights Reserved. 
# Licensed to you under GNU Public License v.2.
# See www.gnu.org. 
# 

use strict;

use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;
use HTTP::Status qw(status_message);
use HTTP::Date qw(time2str str2time);
 

use vars qw( $ua $cookies );

$ua = LWP::UserAgent->new( agent => "Mozilla" );

$cookies = new HTTP::Cookies( file => "~/.cookies.txt", autosave => 1 );

 

sub make_tree {
  my ($html) = @_;
  my $tree = HTML::TreeBuilder->new;
  $tree->parse( $html );
  return $tree;
}

 

sub get_request {
  my ($req) = (@_);
  $cookies->add_cookie_header($req);
  my $res = $ua->request($req);
  if ($res->is_success) {
    $cookies->extract_cookies($res);
    return $res;
  } else {   
    print STDERR "Failed to execute HTTP request: ", $res->status_line,

    print STDERR $res->as_string;
  }

  return undef;

}

 

sub get_webpage {
  my ($url) = @_;
  my $req = HTTP::Request->new(GET => $url);
  
  for( my $i = 0; $i < 4; $i++ ) {
    my $result = get_request( $req );
 
    if( !$result ) {
      print STDERR "Failed to get url '$url' ($i).\n";
      next;
    }
 
    return $result;
  }
  return undef;
}

$| = 1;

my $success = {};

foreach my $id (@ARGV) {
  if( $id =~ /http/ ) {
    
    if( $id =~ /\bv=([\w-\+]+)/ ) {
      $id = $1;
    } else {
      print STDERR "Cannot find ID 'v' in URL '$id'.\n";
      next;
    }
  }

  
  print "YouTube $id: ";

  $success->{$id} = 0;

  # Logic: youtube page has a link to full screen like this 
  #
  # /watch_fullscreen?video_id=Svbcwx6FZPA&l=29&t=OEgsToPDskIcPD66jq5hGIGjcDUoqyG0&sk=eJobROyFhIp3BVhijFQGqAC&fs=1&title=
  #
  # We need to compute this:
  #
  # http://www.youtube.com/get_video?video_id=Svbcwx6FZPA&t=OEgsToPDskIcPD66jq5hGIGjcDUoqyG0&sk=eJobROyFhIp3BVhijFQGqAC

  print "Querying. ";
  my $url = "http://youtube.com/watch?v=$id";
  my $resp = get_webpage( $url );
  if( $resp->content =~ /\/watch_fullscreen\?video_id=.*?&l=\d+\&t=([\w-\+]+)&sk=([\w-\+]+)&fs=1/ ) {
    my $t = $1;
    my $sk = $1;
    #print "t=$t, sk=$sk.\n";

    my $title = "$id.avi";
    if( $resp->content =~ /<title>YouTube\s+-\s+(.*?)<\/title>/ ) {
      $title = "$1.$id.avi";
      $title =~ s/(\/|\\| |\+|\`|\'|\;)/_/g;
      $title =~ s/_+/_/g;
    }

    my $url = "http://www.youtube.com/get_video?video_id=$id&t=$t&sk=$sk";
    print "Loading $title... ";
    my $video = get_webpage( $url );
    if( $video && $video->is_success ) {
      unless( open( VIDEO, ">$title" ) ) {
        print STDERR "Cannot open $title for writing.\n";
        next;
      }
      print "Saving " . length( $video->content ) . " bytes. ";
      print VIDEO $video->content;
      close( VIDEO );
      print " OK!\n";
      $success->{$id} = 1;
    } else {
      print STDERR "FAILED to load $id from $url.\n";
    }
  } else {
    print STDERR "BAD YouTube format at $url\n";
    if( $resp->content =~ /(\"\/watch_fullscreen.*?\")/ ) {
      print "URL = '$1'.\n";
    } else {
      print $resp->content . "\n\n-------------------\n\n";
    }
    next;
  }
}

foreach my $k (sort keys %$success ) {
  print "Summary: $k ==> " . ($success->{$k} ? "OK" : "BAD") . "\n";
}


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

Date: Wed, 11 Apr 2007 17:09:41 GMT
From: "John W. Krahn" <someone@example.com>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <pD8Th.64976$__3.47974@edtnps90>

Ignoramus13850 wrote:
> Plz critique...
> 

Test your program with warnings enabled and then repost when you have fixed
the problems that it warns you about.



John
-- 
Perl isn't a toolbox, but a small machine shop where you can special-order
certain sorts of tools at low cost and in short order.       -- Larry Wall


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

Date: Wed, 11 Apr 2007 10:31:52 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <_rKdnQzbYtoahoDbnZ2dnUVZ_segnZ2d@giganews.com>

Ignoramus13850 wrote:

(snipped)

> Plz critique...

> use strict;

> my $success = {};

I am sure others will rip apart your code then impose
their own personal opinion as hard fact and hard law.

However, you afford a chance to highlight a problem
which also serves as a signal a majority of Perl
programmers are less than adequately skilled.

Mine is not a critique of your code rather a critique
of almost all code I read here and elsewhere.

Use of a "my" lexical declaration on a global basis
serves only to decrease script efficiency. I have
demonstrated this through benchmarking, many times
over a number of years. This usage of a "my" global
variable also serves as a signature of a code writer
who is less than talented.

Many will indicate to use an "our" dynamic declaration
for a global variable. This is ok. However, use of "our"
serves only as a signature of ignorance.

This ignorance is a lack of awareness the strict module
is broken and perl core is designed to be be broken in
a sense of strict module usage.

An "our" declaration serves no purpose other than to
work around the broken strict module. Perl porters
included "our" in perl core to compensate for the
broken strict module. This is a signature of Perl
porters being less than adequately skilled at Perl.
Other words, Perl porters wrote perl core around
the broken strict module.

Writing perl core to meet the needs of a broken module
is absolutely illogical; a module should be written to
work with perl core, not perl core written to work with
a module.

In a sense, the strict module is now perl core and our
perl core is a module to fix the broken strict module.

Only purpose of a "my" global declaration is reduce
efficiency of a Perl script. Only purpose of an "our"
global declaration is to place a Band-Aid on the broken
strict module. Only purpose of "our" inclusion in perl core
is to render perl core a slave program to broken strict.

When I read a "my" global declaration, when I read an "our"
global declaration, when I read "strict" retained in a final
script version, all serve as a signal the script writer is
not a talented Perl programmer and his script is usually
best suited for dropping into a trash can.

Purl Gurl


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

Date: Wed, 11 Apr 2007 13:07:41 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <HrqdnaZGrO1wvoDbnZ2dnUVZ_s_inZ2d@giganews.com>

On Wed, 11 Apr 2007 17:09:41 GMT, John W. Krahn <someone@example.com> wrote:
> Ignoramus13850 wrote:
>> Plz critique...
>> 
>
> Test your program with warnings enabled and then repost when you have fixed
> the problems that it warns you about.
>

Good idea -- I found one problem with regexps (same problem in several
regexps). New version follows. Note that it also has provisions for a
logon to youtube for "adult" flagged versions, but it does not work
for some reasons. I submit the logon form, but youtube still does not
let me log in. Oh well.

#!/usr/bin/perl

# This is a script to download AVIs for YouTube videos, maybe for
# watching later on laptop or just adding them to your video library.
# 
# It works by giving it IDs or URLs of YouTube videos (it figures out
# IDs from URLs as URLs are easier to copy/paste into command line). 
# 
# Example: 
# 
# $ YouTube http://youtube.com/watch?v=Svbcwx6FZPA sXzmXy226po i7DcvMrNXCk
# 
# would load videos Svbcwx6FZPA sXzmXy226po i7DcvMrNXCk
# 
# Copyright(C) Igor Chudov, 2007. All Rights Reserved. 
# Licensed to you under GNU Public License v.2.
# See www.gnu.org. 
# 

use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;
use HTTP::Status qw(status_message);
use HTTP::Date qw(time2str str2time);
use WWW::Mechanize::GZip;
use Getopt::Long;

use vars qw( $ua $cookies );

$ua = new WWW::Mechanize::GZip( agent => "Mozilla" );
#LWP::UserAgent->new( agent => "Mozilla" );

$cookies = new HTTP::Cookies( file => "~/.cookies.txt", autosave => 1 );


sub make_tree {
  my ($html) = @_;
  my $tree = HTML::TreeBuilder->new;
  $tree->parse( $html );
  return $tree;
}

 

sub get_request {
  my ($req) = (@_);
  $cookies->add_cookie_header($req);
  my $res = $ua->request($req);
  if ($res->is_success) {
    $cookies->extract_cookies($res);
    return $res;
  } else {   
    print STDERR "Failed to execute HTTP request: ", $res->status_line,

    print STDERR $res->as_string;
  }

  return undef;

}

 

sub get_webpage {
  my ($url) = @_;
  my $req = HTTP::Request->new(GET => $url);
  
  for( my $i = 0; $i < 4; $i++ ) {
    my $result = get_request( $req );
 
    if( !$result ) {
      print STDERR "Failed to get url '$url' ($i).\n";
      next;
    }
 
    return $result;
  }
  return undef;
}

$| = 1;

my $success = {};

my $login = undef;
my $password = undef;

GetOptions(
           "login=s", \$login,
           "password=s", \$password,
           );

if( $login ) {
  if( $password ) {
    #
    # Logon with login and password
    #
    my $page = $ua->get( 'http://youtube.com/login?next=/index' );
    
    #print $ua->form_name( "loginForm" )->dump . ".\n";
    #exit 1;
    
    my $resp = $ua->submit_form( form_name => "loginForm",
                                 fields => {
                                            current_form => "loginForm",
                                            "next" => '/index',
                                            username => $login,
                                            password => $password,
                                            action_login => "Log In",
                                           },
                               );
    print "Login=$login, password=$password.\n";
    print "Result: " . $resp->content . ".\n";
  } else {
    die "Password required"; 
  }
}

#exit 1;

foreach my $id (@ARGV) {
  if( $id =~ /http/ ) {
    if( $id =~ /\bv=([\w\-\+]+)/ ) {
      $id = $1;
    } else {
      print STDERR "Cannot find ID 'v' in URL '$id'.\n";
      next;
    }
  }

  
  print "YouTube $id: ";

  $success->{$id} = 0;

  # Logic: youtube page has a link to full screen like this 
  #
  # /watch_fullscreen?video_id=Svbcwx6FZPA&l=29&t=OEgsToPDskIcPD66jq5hGIGjcDUoqyG0&sk=eJobROyFhIp3BVhijFQGqAC&fs=1&title=
  #
  # We need to compute this:
  #
  # http://www.youtube.com/get_video?video_id=Svbcwx6FZPA&t=OEgsToPDskIcPD66jq5hGIGjcDUoqyG0&sk=eJobROyFhIp3BVhijFQGqAC

  print "Querying. ";
  my $url = "http://youtube.com/watch?v=$id";
  my $resp = get_webpage( $url );
  if( $resp->content =~ /\/watch_fullscreen\?video_id=.*?&l=\d+\&t=([\w\-\+]+)&sk=([\w\-\+]+)&fs=1/ ) {
    my $t = $1;
    my $sk = $2;
    #print "t=$t, sk=$sk.\n";

    my $title = "$id.avi";
    if( $resp->content =~ /<title>YouTube\s+-\s+(.*?)<\/title>/ ) {
      $title = "$1";
      $title =~ s/(\/|\\| |\+|\`|\'|\;|\!|\(|\)|\-)/_/g;
      $title =~ s/_+/_/g;
      $title .= ".$id.avi";
    }

    my $url = "http://www.youtube.com/get_video?video_id=$id&t=$t&sk=$sk";
    print "Loading $title... ";
    my $video = get_webpage( $url );
    if( $video && $video->is_success ) {
      unless( open( VIDEO, ">$title" ) ) {
        print STDERR "Cannot open $title for writing.\n";
        next;
      }
      print "Saving " . length( $video->content ) . " bytes. ";
      print VIDEO $video->content;
      close( VIDEO );
      print " OK!\n";
      $success->{$id} = 1;
    } else {
      print STDERR "FAILED to load $id from $url.\n";
    }
  } else {
    print STDERR "BAD YouTube format at $url\n\n\n";
    if( $resp->content =~ /(\"\/watch_fullscreen.*?\")/ ) {
      print "URL = '$1'.\n";
    } else {
      print STDERR "Status: " . $resp->as_string . ".\n";
      if( $resp->content =~ /body/i ) {
        print "====>" . $resp->content . "\n\n-------------------\n\n";
      } else {
        my $content = $resp->content;
        $content =~ s/[\0-\x1F]/*/g;
        $content =~ s/[\x7F-\xFF]/*/g;
        $content = substr( $content, 0, 50 );
        print "====> BAD CONTENT\n\n$content\n\n";
      }
    }
    next;
  }
}

foreach my $k (sort keys %$success ) {
  #print "Summary: $k ==> " . ($success->{$k} ? "OK" : "BAD") . "\n";
  next if $success->{$k};
  print "FAILED: $k\n";
}



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

Date: Wed, 11 Apr 2007 13:14:09 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <eaKdnQ-P5O3suIDbnZ2dnUVZ_h2pnZ2d@giganews.com>

On Wed, 11 Apr 2007 10:31:52 -0700, Purl Gurl <purlgurl@purlgurl.net> wrote:
> Ignoramus13850 wrote:
>
> (snipped)
>
>> Plz critique...
>
>> use strict;
>
>> my $success = {};
>
> I am sure others will rip apart your code then impose
> their own personal opinion as hard fact and hard law.
>
> However, you afford a chance to highlight a problem
> which also serves as a signal a majority of Perl
> programmers are less than adequately skilled.
>
> Mine is not a critique of your code rather a critique
> of almost all code I read here and elsewhere.
>
> Use of a "my" lexical declaration on a global basis
> serves only to decrease script efficiency. I have
> demonstrated this through benchmarking, many times
> over a number of years. This usage of a "my" global
> variable also serves as a signature of a code writer
> who is less than talented.
>
> Many will indicate to use an "our" dynamic declaration
> for a global variable. This is ok. However, use of "our"
> serves only as a signature of ignorance.
>
> This ignorance is a lack of awareness the strict module
> is broken and perl core is designed to be be broken in
> a sense of strict module usage.
>
> An "our" declaration serves no purpose other than to
> work around the broken strict module. Perl porters
> included "our" in perl core to compensate for the
> broken strict module. This is a signature of Perl
> porters being less than adequately skilled at Perl.
> Other words, Perl porters wrote perl core around
> the broken strict module.
>
> Writing perl core to meet the needs of a broken module
> is absolutely illogical; a module should be written to
> work with perl core, not perl core written to work with
> a module.
>
> In a sense, the strict module is now perl core and our
> perl core is a module to fix the broken strict module.
>
> Only purpose of a "my" global declaration is reduce
> efficiency of a Perl script. Only purpose of an "our"
> global declaration is to place a Band-Aid on the broken
> strict module. Only purpose of "our" inclusion in perl core
> is to render perl core a slave program to broken strict.
>
> When I read a "my" global declaration, when I read an "our"
> global declaration, when I read "strict" retained in a final
> script version, all serve as a signal the script writer is
> not a talented Perl programmer and his script is usually
> best suited for dropping into a trash can.

Well, that "my" declaration makes things slower, is new to me and
surprises me. However, I will take your word at face value. 

Now, back to the $success variable. A truly talented Perl programmer
would notice that it is only used after loading one or perhaps two web
pages, which very rarely. With this information, any moderately
intelligent human would realize that efficiency of access to suich a
rarely used variable, is a moot point.

Thanks, though, for pointing out slowness of the use of "my"
variables.

i


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

Date: Wed, 11 Apr 2007 11:32:14 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <yb-dnWLnGNAwtIDbnZ2dnUVZ_rqhnZ2d@giganews.com>

Ignoramus13850 wrote:

> Purl Gurl wrote:
>> Ignoramus13850 wrote:

(snipped)

>>> Plz critique...

>>> use strict;
>>> my $success = {};


>> Use of a "my" lexical declaration on a global basis
>> serves only to decrease script efficiency. I have
>> demonstrated this through benchmarking, many times
>> over a number of years....

> Well, that "my" declaration makes things slower, is new to me and
> surprises me. However, I will take your word at face value. 

No need to take my word on face value. You only need to employ
well written benchmark tests to verify. Additionally, what logic
would you afford readers to justify use of a private lexical
variable on a global basis?

Quite the no-brainer to realize perl core will flag a "my" variable
then "watch" for this variable to drop out of scope to release used
memory for reuse. A global "my" declaration never falls out of scope,
thus perl core performs useless operations which only serve to reduce
efficiency of a Perl script. No benchmark is truly needed, only good
thinking is needed, yes?

> Now, back to the $success variable. A truly talented Perl programmer
> would notice that it is only used after loading one or perhaps two web
> pages, which very rarely. With this information, any moderately
> intelligent human would realize that efficiency of access to suich a
> rarely used variable, is a moot point.

Yours is most illogical. You are justifying incorrect usage of a variable
declaration based on a premise this variable is used only a few times.

"My crashing into a park car is acceptable because I only hit one car,
rather than hitting a lot of cars."

I am entertained by your asking readers to critique and your strong
personal defense against this requested critique.

Rather illogical, yes?

Purl Gurl


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

Date: Wed, 11 Apr 2007 19:09:54 GMT
From: "Jürgen Exner" <jurgenex@hotmail.com>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <6oaTh.15005$Cl.11716@trndny08>

Ignoramus13850 wrote:
> Plz critique...
[whatevver]

Will you for the f*** of it stop changing your name?

***PLONK*** again

jue 




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

Date: 11 Apr 2007 15:00:31 -0400
From: Charlton Wilbur <cwilbur@chromatico.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <87lkgy7n3k.fsf@mithril.chromatico.net>

>>>>> "I" == Ignoramus13850  <ignoramus13850@NOSPAM.13850.invalid> writes:

    I> Well, that "my" declaration makes things slower, is new to me
    I> and surprises me. However, I will take your word at face value.

You might not want to do that without a bit of consideration. A quick
look at Purl Gurl's posting history on Google Groups should indicate
the sort of esteem that she is held in here, and how much validity her
advice usually has.  When she's right, it's usually by accident.

Charlton



-- 
Charlton Wilbur
cwilbur@chromatico.net


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

Date: Wed, 11 Apr 2007 14:17:48 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <wY-dnVbq67nBqYDbnZ2dnUVZ_j6dnZ2d@giganews.com>

Download a real USENET news reader and learn how to use a killfile. 

Thank you!

i

On Wed, 11 Apr 2007 19:09:54 GMT, Jürgen Exner <jurgenex@hotmail.com> wrote:
> Ignoramus13850 wrote:
>> Plz critique...
> [whatevver]
>
> Will you for the f*** of it stop changing your name?
>
> ***PLONK*** again
>
> jue 
>
>


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

Date: Wed, 11 Apr 2007 12:23:45 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <UuqdndkyuIcjqIDbnZ2dnUVZ_vWtnZ2d@giganews.com>

Ignoramus13850 wrote:

> Purl Gurl wrote:
>> Ignoramus13850 wrote:

(snipped)


>>> Plz critique...

>>> use strict;
>>> my $success = {};

>>Use of a "my" lexical declaration on a global basis
>>serves only to decrease script efficiency. I have
>>demonstrated this through benchmarking, many times

> Well, that "my" declaration makes things slower, is new to me and
> surprises me. However, I will take your word at face value. 

Benchmark results follow.

Readers are to note there is an inherent problem with benchmarking
incorrectly declared "my" variables. Within coding for benchmarking,
a "my" declaration is treated as being private through use of a
private block for benchmark code. This is unavoidable using the
benchmark module. Other benchmark testing methods need to be
employed to return a "true" difference in efficiency, rather than
a "relative" difference as returned by the benchmark module.

Nonetheless, these tests do exemplify a distinct difference between
a global variable and a lexical private variable, related to efficiency.
Again, a no-brainer to realize a correct global declaration makes use
of less perl core operations than does an incorrect global private
lexical variable declaration.

Incorrect use of declaring a private lexical variable on a global
basis does reduce script efficiency and is clearly a signature of
a Perl programmer who is less than acceptably talented.

A notion which many readers will not realize, is declaration of
a "my" private lexical variable, when performed correctly, for a
short simple Perl script, might inflict a loss of efficiency greater
than efficiency increase realized by release of used memory for
subsequent reuse.

There are many case examples of "my" declarations being a poor choice.

A good Perl programmer will question use of a "my" variable and
will question many other notions which are blindly promulgated
by the gods of Perl.


Purl Gurl


#!perl

# print "Content-type: text/plain\n\n";

use Benchmark;

print "Run One:\n\n";
&Time;

print "\n\nRun Two:\n\n";
&Time;

print "\n\nRun Three:\n\n";
&Time;

sub Time
  {
   timethese (10000000,
   {
    'Correct_Variable' =>
    '$variable = "this is correct";
     $variable =~ tr/a-z/A-Z/;',

   'Incorrect_Variable' =>
    'my ($variable) = "this is incorrect";
     $variable =~ tr/a-z/A-Z/;',

   } );
  }


PRINTED RESULTS:

Run One:

Benchmark: timing 10000000 iterations of Correct_Variable, Incorrect_Variable...
Correct_Variable:  4 wallclock secs ( 3.48 usr +  0.00 sys =  3.48 CPU) @ 2870264.06/s
Incorrect_Variable:  5 wallclock secs ( 4.78 usr +  0.00 sys =  4.78 CPU) @ 2091612.63/s


Run Two:

Benchmark: timing 10000000 iterations of Correct_Variable, Incorrect_Variable...
Correct_Variable:  3 wallclock secs ( 3.45 usr +  0.00 sys =  3.45 CPU) @ 2895193.98/s
Incorrect_Variable:  5 wallclock secs ( 4.94 usr +  0.01 sys =  4.95 CPU) @ 2019386.11/s


Run Three:

Benchmark: timing 10000000 iterations of Correct_Variable, Incorrect_Variable...
Correct_Variable:  3 wallclock secs ( 3.52 usr +  0.00 sys =  3.52 CPU) @ 2844141.07/s
Incorrect_Variable:  5 wallclock secs ( 4.95 usr +  0.00 sys =  4.95 CPU) @ 2018978.40/s


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

Date: Wed, 11 Apr 2007 12:27:02 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <wYSdnYTISvceq4DbnZ2dnUVZ_tqnnZ2d@giganews.com>

Charlton Wilbur wrote:

>>>>>> Ignoramus13850 wrote:

>> Well, that "my" declaration makes things slower, is new to me
>> and surprises me. However, I will take your word at face value.

> You might not want to do that without a bit of consideration. A quick
> look at Purl Gurl's posting history on Google Groups should indicate
> the sort of esteem that she is held in here, and how much validity her
> advice usually has.  When she's right, it's usually by accident.

Your historical and frequent childish trolling of this
discussion group benefits none.

You need to fix your news reader; your reader does not
quote correctly per USENET acceptable usage guidelines.

Purl Gurl


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

Date: Wed, 11 Apr 2007 14:28:49 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <-J-dnT3zKeJsq4DbnZ2dnUVZ_vGinZ2d@giganews.com>

On 11 Apr 2007 15:00:31 -0400, Charlton Wilbur <cwilbur@chromatico.net> wrote:
>>>>>> "I" == Ignoramus13850  <ignoramus13850@NOSPAM.13850.invalid> writes:
>
>    I> Well, that "my" declaration makes things slower, is new to me
>    I> and surprises me. However, I will take your word at face value.
>
> You might not want to do that without a bit of consideration. A quick
> look at Purl Gurl's posting history on Google Groups should indicate
> the sort of esteem that she is held in here, and how much validity her
> advice usually has.  When she's right, it's usually by accident.
>

OK, thank you for your warning. 

I wrote a test script to test Purl Gurl's assertion. 

The results are:

### ::~/tmp/perl==>./my.pl
### My took 38 seconds.
### Global took 35 seconds.

So, it appears that Purl Gurl just happened to be wrong. (unless PG
thinks that difference between 35 and 38 is that important).

A note is in order here, which is that I operate a multitasking
operating system called "Linux", and so run times could be affected by
other programs running concurrently. With that in mind, I ran my.pl
again and got:

### ::~/tmp/perl==>./my.pl
### My took 37 seconds.
### Global took 35 seconds.


i

#!/usr/bin/perl

$count = 50_000_000;

my $t0 = time;

{
  my $x = 0;
  for( my $i = 0; $i < $count; $i++ ) {
    my $y = 1;
    my $z = 2;
    $x += $y+$z;
  }
}

my $t1 = time;

print "My took " . ($t1-$t0) . " seconds.\n";

{
  $x = 0;
  for( $i = 0; $i < $count; $i++ ) {
    $y = 1;
    $z = 2;
    $x += $y+$z;
  }
}

my $t2 = time;

print "Global took " . ($t2-$t1) . " seconds.\n";



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

Date: Wed, 11 Apr 2007 12:38:30 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <9vKdnbBfF9yupIDbnZ2dnUVZ_rWnnZ2d@giganews.com>

Ignoramus13850 wrote:

(snipped)

> I wrote a test script to test Purl Gurl's assertion. 

> The results are:

> ### ::~/tmp/perl==>./my.pl
> ### My took 38 seconds.
> ### Global took 35 seconds.

> So, it appears that Purl Gurl just happened to be wrong. (unless PG
> thinks that difference between 35 and 38 is that important).

DUH! Your test results prove my contention is absolutely right.

This time your thinking is not illogical, your thinking is stupid;
you expect readers to believe 35 seconds is slower than 38 seconds.

How insulting of you to assume all readers to be idiots.


Purl Gurl


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

Date: Wed, 11 Apr 2007 15:40:21 -0400
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <x7odlu8ztm.fsf@mail.sysarch.com>

>>>>> "I" == Ignoramus13850  <ignoramus13850@NOSPAM.13850.invalid> writes:

  I> Well, that "my" declaration makes things slower, is new to me and
  I> surprises me. However, I will take your word at face value. 

if you search for moronzilla's posting history you will not take its
advice at any value. if there is any speed issue with my it is
negligible but its use will improve your program quality. and if you
want to use strict (also always recommended) my is needed.

  I> Now, back to the $success variable. A truly talented Perl
  I> programmer would notice that it is only used after loading one or
  I> perhaps two web pages, which very rarely. With this information,
  I> any moderately intelligent human would realize that efficiency of
  I> access to suich a rarely used variable, is a moot point.

  I> Thanks, though, for pointing out slowness of the use of "my"
  I> variables.

you place your thanks in the wrong place. you have been warned.

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: Wed, 11 Apr 2007 15:43:27 -0400
From: Sherm Pendley <spamtrap@dot-app.org>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <m2veg2n1cw.fsf@local.wv-www.com>

Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid> writes:

> On Wed, 11 Apr 2007 10:31:52 -0700, Purl Gurl <purlgurl@purlgurl.net> wrote:

(nothing worth reading)

> Well, that "my" declaration makes things slower, is new to me and
> surprises me. However, I will take your word at face value.

It doesn't, and you shouldn't. Purl Gurl is a well-known troll who apparently
finds it amusing to intentionally mislead newbies. She's been doing it for
years - search for her nick in google groups and you'll see.

sherm--

-- 
Web Hosting by West Virginians, for West Virginians: http://wv-www.net
Cocoa programming in Perl: http://camelbones.sourceforge.net


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

Date: Wed, 11 Apr 2007 14:43:39 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <GoydnYLO7-j2p4DbnZ2dnUVZ_gKdnZ2d@giganews.com>

On Wed, 11 Apr 2007 15:40:21 -0400, Uri Guttman <uri@stemsystems.com> wrote:
>>>>>> "I" == Ignoramus13850  <ignoramus13850@NOSPAM.13850.invalid> writes:
>
>  I> Well, that "my" declaration makes things slower, is new to me and
>  I> surprises me. However, I will take your word at face value. 
>
> if you search for moronzilla's posting history you will not take its
> advice at any value. if there is any speed issue with my it is
> negligible but its use will improve your program quality. and if you
> want to use strict (also always recommended) my is needed.
>
>  I> Now, back to the $success variable. A truly talented Perl
>  I> programmer would notice that it is only used after loading one or
>  I> perhaps two web pages, which very rarely. With this information,
>  I> any moderately intelligent human would realize that efficiency of
>  I> access to suich a rarely used variable, is a moot point.
>
>  I> Thanks, though, for pointing out slowness of the use of "my"
>  I> variables.
>
> you place your thanks in the wrong place. you have been warned.
>
> uri
>

Yes, based on my own testing, this is a moot issue.

i


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

Date: Wed, 11 Apr 2007 14:45:30 -0500
From: Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <Goydnb3O7-hHp4DbnZ2dnUVZ_gKdnZ2d@giganews.com>

On Wed, 11 Apr 2007 15:43:27 -0400, Sherm Pendley <spamtrap@dot-app.org> wrote:
> Ignoramus13850 <ignoramus13850@NOSPAM.13850.invalid> writes:
>
>> On Wed, 11 Apr 2007 10:31:52 -0700, Purl Gurl <purlgurl@purlgurl.net> wrote:
>
> (nothing worth reading)
>
>> Well, that "my" declaration makes things slower, is new to me and
>> surprises me. However, I will take your word at face value.
>
> It doesn't, and you shouldn't. Purl Gurl is a well-known troll who apparently
> finds it amusing to intentionally mislead newbies. She's been doing it for
> years - search for her nick in google groups and you'll see.

I think that good programmers would not make their programs a mess by
not using safe "my" declarations, for the sake of making a 37 second
program into a 35 second program.

i


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

Date: Wed, 11 Apr 2007 12:52:06 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <vuCdncY_faf_oYDbnZ2dnUVZ_uHinZ2d@giganews.com>

Sherm Pendley wrote:

> Ignoramus13850 wrote:
>> Purl Gurl wrote:

> It doesn't, and you shouldn't. Purl Gurl is a well-known troll who apparently
> finds it amusing to intentionally mislead newbies. She's been doing it for
> years - search for her nick in google groups and you'll see.

Your historical and frequent childish trolling of this
discussion group benefits none.

Purl Gurl


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

Date: 11 Apr 2007 13:00:01 -0700
From: usenet@DavidFilmer.com
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <1176321601.825054.60810@e65g2000hsc.googlegroups.com>

On Apr 11, 12:23 pm, Purl Gurl <purlg...@purlgurl.net> wrote:

> [snip a bunch of stupid inane benchmarking crap]

So if you gotta do something TEN MILLION times and really, really need
to shave ONE OR TWO SECONDS off that process then, sure, skip the
my().

While you're at it, don't bother to check $! on I/O operations (that
slows things down as well).

One of the consequences of following good any programming practice is
usually a tiny performance penalty.  I've never known of an actual
application where this tiny penalty was of concern.

In fact, why use Perl at all, if time is such a critical
consideration?  C++ would be faster, and assembler would be faster
still.

--
David Filmer (http://DavidFilmer.com)



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

Date: Wed, 11 Apr 2007 16:00:22 -0400
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: My script to download YouTube videos (critique wanted)
Message-Id: <x7bqhu8yw9.fsf@mail.sysarch.com>

>>>>> "I" == Ignoramus13850  <ignoramus13850@NOSPAM.13850.invalid> writes:

  I> On Wed, 11 Apr 2007 15:40:21 -0400, Uri Guttman <uri@stemsystems.com> wrote:
  >> you place your thanks in the wrong place. you have been warned.

  I> Yes, based on my own testing, this is a moot issue.

and you should now learn to ignore moronzilla. notice how it accuses
everyone else as trolls and how it never enters any threads about
serious stuff like data structures, forking, modules, OO, etc?
moronzilla is stuck using substr as its favorite hammer.

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: 11 Apr 2007 11:16:54 -0700
From: "geoffrobinson" <geoffrobinson@gmail.com>
Subject: Re: Problems Binding Parameters for Stored Procedure
Message-Id: <1176315414.447221.281460@n59g2000hsh.googlegroups.com>

On Apr 10, 3:49 pm, 4i4ko Trevi4ko <4i4ko_trevi...@hui.de> wrote:
> ... or try so:
> instead of:
> $sth->bind_param(1, "some string");
> this one:
> $sth->bind_param(1, "'some string'");

I still have to work out everything.

Currently, I'm only binding the inout parameter and am inserting the
string directly into the statement. The downside is that I can just
rebind and rerun when the string value changes, but that's ok for now.
At least I'm getting the variable value out.

Thanks for your help.



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

Date: Wed, 11 Apr 2007 10:05:44 -0400
From: Tony Curtis <tony_curtis32@yahoo.com>
Subject: Re: Regular expression
Message-Id: <evipvn$f25$1@knot.queensu.ca>

guillaume.carbonneau@gmail.com wrote:
> On Apr 10, 4:43 pm, 4i4ko Trevi4ko <4i4ko_trevi...@hui.de> wrote:
>> On Tue, 10 Apr 2007 15:41:25 -0500, J. Gleixner wrote:
>>> sk wrote:
>>>> I m trying to add a extra keyword on a specific word in a html document
>>>> In the following document I want to put "My" in front of all the
>>>> words"computer"
>>>> excluding the id for the stylesheet and name of image files.
>>>> <html>
>>>>     <head>
>>>>         <title>hello</titile>
>>>>     </head>
>>>>     <body>
>>>>         <div id="computer"> This is computer</div>
>>>>        <img src="images/computer.jpg" >Computer
>>>>     </body>
>>>> </html>
>>> s/\scomputer/ My computer/;
>> will not work on:
>> <img src="images/computer.jpg" >Computer
> 
> I got it through 2 regular expressions. Maybe someone can help me
> merge them together...
> 
> $string =~ s/(>.*)(computer)(.*<)/\1my \2\3/igms;
> $string =~ s/(>.*)(computer)(.*<)/\1my \2\3/ig;

A regex is the wrong (general) solution here.  You need an HTML parser.

hth
t


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

Date: Wed, 11 Apr 2007 14:16:20 GMT
From: "Jürgen Exner" <jurgenex@hotmail.com>
Subject: Re: Regular expression
Message-Id: <U46Th.14806$Cl.10087@trndny08>

sk wrote:
> I m trying to add a extra keyword on a specific word in a html
> document In the following document I want to put "My" in front of all
> the words"computer"
> excluding the id for the stylesheet and name of image files.

As has been mentioned a gazillion times in this NG parsing HTML correctly is 
not easy and only a masochist would try to do it using REs. It is very easy 
to find sample HTML code, that breaks any RE construct that you can come up 
with. See the FAQ "How do I remove HTML from a string?" for some examples 
that you probably forgot to consider.

Instead just use a proper HTML parser from CPAN. They come ready-made and 
most important they actualy work.

jue 




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

Date: 11 Apr 2007 12:27:23 -0700
From: "PGPS" <premgrps@gmail.com>
Subject: Script to know who clicked a link?
Message-Id: <1176319643.907171.64390@w1g2000hsg.googlegroups.com>

Hi,
  I want to know who all clicked a particular link (cgi-script) on any
website.

1. Link points to my own webserver
2. Link can be sent anyway. Either emailed or posted on a site which
needs login

If emailed, then the email page which shows the link also has the
users name. When clicked I want to obtain the name.

If posted on a forum which has a login, I want to get the name (which
is present in the page having the link).

HTTP-Referrer doesn't have the username, so it probably is going to be
a javascript based one.

The reason for doing this is,
a) to know who's using my link
b) to deny access to people who are using it excessively.

Any ideas?

Thanks.



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

Date: 11 Apr 2007 12:35:36 -0700
From: usenet@DavidFilmer.com
Subject: Re: Script to know who clicked a link?
Message-Id: <1176320135.972251.19870@l77g2000hsb.googlegroups.com>

On Apr 11, 12:27 pm, "PGPS" <premg...@gmail.com> wrote:
> If emailed, then the email page which shows the link also has the
> users name. When clicked I want to obtain the name.

Lemme see if I can drag a bit of clarity out of this question.

So you send them a link like this:

   http://www.example.com/cgi-bin/stuff.cgi?name=DavidFilmer

Is that right?

The name is simply a parameter.  If you are using CGI.pm, you can
simply query it:

   my $username = param('name');

You can dump it to a logfile or database or whatever (you didn't say
how you intend to actually keep track of this activity).


--
The best way to get a good answer is to ask a good question.
David Filmer (http://DavidFilmer.com)



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

Date: 11 Apr 2007 12:44:51 -0700
From: "PGPS" <premgrps@gmail.com>
Subject: Re: Script to know who clicked a link?
Message-Id: <1176320691.707663.301970@o5g2000hsb.googlegroups.com>

Thanks, however, I don't want to send them individually.

Consider I have a profile in a forum, where I can put my own
javascript code.

Everyone needs a login.

So, when someone comes to my profile, the page which shows him my
profile also has his name on the page (his view)

Assume that I know how to extract this name from the page.

When he clicks on this link (javascript probably), it appends his name
to the link and sends a query like what you stated in your message
http://www.example.com/cgi-bin/stuff.cgi?name=DavidFilmer


Any ideas?

Thanks.




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

Date: Wed, 11 Apr 2007 12:48:52 -0700
From: Purl Gurl <purlgurl@purlgurl.net>
Subject: Re: Script to know who clicked a link?
Message-Id: <vuCdncc_fac8poDbnZ2dnUVZ_uGjnZ2d@giganews.com>

PGPS wrote:


> I want to know who all clicked a particular link (cgi-script) on any
> website.

Apache authentication (or similar) and $REMOTE_USER is a solution,
if you are using an Apache server.

If not, use of IP Addresses can be a solution but this very often
results in false positives; multiple users of an IP Address
or an assigned block of IP Addresses.

A "logon" methodology is about the only reliable method for
identification of a unique user. Use of "cookies" is another
possible methodology affording good reliability, if a browser
has cookies enabled.

Be careful with this one.

Purl Gurl

* follow up set to comp.lang.perl.misc


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

Date: 11 Apr 2007 13:06:34 -0700
From: "Jorge" <awkster@yahoo.com>
Subject: Toggle between hot filehandles question
Message-Id: <1176321994.487618.109860@y80g2000hsf.googlegroups.com>

Using  Perl v5.8.3 built for sun4-solaris-64

I'm putting together a handshaking front-end for a script that will
read a spreadsheet (OLE) and use the results as DBI/DBD directly into
an Oracle table.

Because this will be (someday:)) a production script, I need to keep a
solid record of all the warnings, errors and such in a log as well as
splash that same information to the terminal for the user.

Therefore, I have 2 filehandles that I want to toggle between hot and
cold -- STDOUT and LOG ($fh in subroutine).

A snippet (very pruned down) is below to show how I am doing the
toggling. As already said, it is working but I can't believe it's the
correct way -- it's downright ugly.

Is there a more elegant approach to this.

FWIW: I've been through the FAQ's, the 'suffering from buffering'
article and many others and couldn't find any reference to this
particular situation.

All help is greatly appreciated.

Jorge


#!/usr/local/bin/perl -w

use strict;
use Cwd;

my $log = "log";

my $log_date_time = scalar(localtime);
local $0 = get_pathname_leaf($0);
my $curWorkDir = getcwd();
my $user_name = $ENV{'USER'};

open LOG, ">$log" or die "cannot open $log $!\n";

# make filehandle hot print header lines to log
select( ( select(LOG), $| = 1 )[0] );

print LOG "		Created by user ".$user_name." [".$log_date_time."]\n";
print LOG "		==================================================\n";

if(&check_args($#ARGV + 1, \@ARGV, \*LOG) == 1){
	select( ( select(LOG), $| = 0 )[0] );
	print "Exiting due to errors ... [from calling script]\n";
	select( ( select(LOG), $| = 1 )[0] );
	print LOG "Exiting due to errors ... [from calling script]\n";
	close(LOG);
	exit();
}

sub check_args(){
	my $numargs = shift;
   	my $files = shift;
	my $fh = shift;

	if($numargs != 1){
		select( ( select($fh), $| = 0 )[0] );
		print "\n\nUsage: $0 input_file <Enter>\n\n";
		select( ( select($fh), $| = 1 )[0] );
		print $fh "\n\nUsage: $0 input_file <Enter>\n\n";
		exit();
	}

	my $flag = 0;
	my $arg;
	my $i = 0;

	foreach $arg (@$files) {
		++$i;
		if($i == 1 && (!( -f $arg))){
			select( ( select($fh), $| = 0 )[0] );
			print "\n\n",$arg," not found \n";
			select( ( select($fh), $| = 1 )[0] );
			print $fh "\n\n",$arg," not found \n";
			$flag = 1;
			last;
		}
		elsif($i == 1 && (!( -s $arg))){
			select( ( select($fh), $| = 0 )[0] );
			print "\n\n",$arg," is an empty file \n";
			select( ( select($fh), $| = 1 )[0] );
			print $fh "\n\n",$arg," is an empty file \n";
			$flag = 1;
			last;
		}
		elsif($i == 1 && (!( -r $arg))){
			select( ( select($fh), $| = 0 )[0] );
			print "\n\n",$arg," is not a readable file \n";
			select( ( select($fh), $| = 1 )[0] );
			print $fh "\n\n",$arg," is not a readable file \n";
			$flag = 1;
			last;
		}
		elsif($arg !~ /\.xls$/i){
			select( ( select($fh), $| = 0 )[0] );
			print "\n\n",$arg," does not appear to be an Excel file\n";
			select( ( select($fh), $| = 1 )[0] );
			print $fh "\n\n",$arg," does not appear to be an Excel file\n";
			$flag = 1;
			last;
		}
	}
	if($flag == 1){return 1;}else{return 0;
	}
}

sub get_pathname_leaf{
    my ($pathname) = @_ ;
    my @split_pathname = split( /[\\\/]/, $pathname ) ;
    my $leaf = pop( @split_pathname ) ;
    return( $leaf ) ;
}



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

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


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