[23628] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 5835 Volume: 10

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Nov 20 14:05:46 2003

Date: Thu, 20 Nov 2003 11:05:10 -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           Thu, 20 Nov 2003     Volume: 10 Number: 5835

Today's topics:
    Re: apache cgi can't open file <flavell@ph.gla.ac.uk>
        Capture external command output line by line on Windows <DibUrim@hotmail.com>
    Re: Capture external command output line by line on Win <ben.liddicott@comodogroup.com>
    Re: Comments on parsing solution. <jurgenex@hotmail.com>
    Re: Comments on parsing solution. <xx087@freenet.carleton.ca>
    Re: Comments on parsing solution. <tore@aursand.no>
    Re: Comments on parsing solution. <pinyaj@rpi.edu>
        fork question (bruno)
    Re: How to extract info from a HTML input box <bluecat22@go.com>
    Re: How to extract info from a HTML input box <syscjm@gwu.edu>
    Re: How to pass DBI handle into module <jwillmore@remove.adelphia.net>
        Perl Sendmail Question <notspam@spamfree.dud>
    Re: Perl Sendmail Question <abigail@abigail.nl>
    Re: Perl Sendmail Question <jwillmore@remove.adelphia.net>
    Re: Perl Sendmail Question <noreply@gunnar.cc>
    Re: Protecting Source code of a perl script ctcgag@hotmail.com
    Re: Protecting Source code of a perl script ctcgag@hotmail.com
    Re: Protecting Source code of a perl script <jwillmore@remove.adelphia.net>
    Re: Sorting an array rs@plusw.de
    Re: Sorting an array (Anno Siegel)
    Re: Sorting an array <pinyaj@rpi.edu>
    Re: trying to grep a $line for $line...any ideas? (Joshua Sparks)
    Re: trying to understand fork and wait <usenet@morrow.me.uk>
        use perl script interactive with a program like mplayer <xthua111@sohu.com>
        use perl script interactive with a program like mplayer <xthua111@sohu.com>
    Re: use perl script interactive with a program like mpl <jwillmore@remove.adelphia.net>
    Re: use perl script interactive with a program like mpl <usenet@morrow.me.uk>
        Win32-OLE equivalent of write_row <spikeywan@bigfoot.com.delete.this.bit>
    Re: Win32-OLE equivalent of write_row <jwillmore@remove.adelphia.net>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

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

Date: Thu, 20 Nov 2003 14:33:24 +0000
From: "Alan J. Flavell" <flavell@ph.gla.ac.uk>
Subject: Re: apache cgi can't open file
Message-Id: <Pine.LNX.4.53.0311201421070.27584@ppepc56.ph.gla.ac.uk>

On Thu, 20 Nov 2003, jcs wrote:

> Sorry if this shouldn't be here - it's peripherally a perl question.

If you're aware that it shouldn't be here, why not check the other
resources first?  perlfaq9 has some useful pointers which - on the
evidence of what you're posting - you don't appear to have used yet.

> 'seems' to be installed and running. Returns hello page
> Konqueror
> http://127.0.0.1/cgi-bin/perl.cgi

The log tells a different story, though...?

> returns "hello world" fine but won't open 'log'
> error_log
> [Wed Nov 19 12:25:13 2003] [error] [client 127.0.0.1] Premature end of
> script headers: perl.cgi

See?  That doesn't look like a successful return of a hello page.

> [Wed Nov 19 12:25:13 2003] [error] [client 127.0.0.1] can't open log at
> /usr/local/apache2/cgi-bin/perl.cgi line 7.

It would seem that we have a clue.  So follow it.

> #!/usr/bin/perl
>
> use SDBM_File;
> use Fcntl;
> use strict;
>
> open (LOG, "+>>log") or die "can't open log";

Feel free to include $! in the message so that you get to find out
more about why it went wrong.

> print LOG "log\n";
> close LOG;
>
> print "Content-type: text/html\n\n";
> print "<HTML>HELLO<BR>WORLD</HTML>";
> print "</HTML>";

The Perl-most part of the answer would, I think, be

    use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

at least during testing.  Seems to me that your script is emitting
some diagnostic information _before_ you got around to outputting
the HTTP response header.  You're having to trawl the server log to
find out why, but CGI::Carp can put the answer right there in your
browser.

The diagnostic IMHO is likely to tell you that your CGI process's uid
doesn't have the ability to open the file that it was trying to open.
But it's better to see what it says, rather than to guess what it
might have been.

This is not the place, I suppose, to comment on your HTML.  But
if you're determined to output that kind of stuff "per pedes" instead
of using CGI.pm, then at least the Perl-ish way would probably be with
a "Here-document".

good luck


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

Date: Thu, 20 Nov 2003 16:24:35 +0200
From: "Dib Urim" <DibUrim@hotmail.com>
Subject: Capture external command output line by line on Windows 98
Message-Id: <bpikqt$f40$1@news2.netvision.net.il>

Hello,

I'm trying to Capture external command output and error line by line.
I wrote this example witch work excellent on Windows 2000:

open(PROC,"DIR 2>&1 |");
while(<PROC>) {
print ("LINE:$_");
}
close(PROC);

But on Windows 98 it don't do nothing!
I'm user perl 5.6.1 activestate 625.
I need to display the output line by line and not all at once
so I can't use system command.
How can I implement it on windows 98 ?

Thanks
Dib




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

Date: Thu, 20 Nov 2003 15:33:33 -0000
From: "Ben Liddicott" <ben.liddicott@comodogroup.com>
Subject: Re: Capture external command output line by line on Windows 98
Message-Id: <bpimso$phl$1@kylie.comodogroup.com>

Hi Dib,

DIR is a built in to the command interperter, command.com.

You have to do this:

open(PROC, "command.com /c DIR |");

Cheers,
Ben Liddicott

"Dib Urim" <DibUrim@hotmail.com> wrote in message
news:bpikqt$f40$1@news2.netvision.net.il...
> Hello,
>
> I'm trying to Capture external command output and error line by line.
> I wrote this example witch work excellent on Windows 2000:
>
> open(PROC,"DIR 2>&1 |");




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

Date: Thu, 20 Nov 2003 15:08:20 GMT
From: "Jürgen Exner" <jurgenex@hotmail.com>
Subject: Re: Comments on parsing solution.
Message-Id: <EN4vb.95839$p9.75243@nwrddc02.gnilink.net>

Prabh wrote:
> Hello all,
> This is about grepping, regexps and parsing data.
> I do have a solution, but I was wondering if anyone could direct me to
> a more efficient one.
> I have a log file of the following format, which contains info. on a
> series of files after a process.
>
> ===============================
> File1:  Info. on File1
> File2:  Info. on File2
> File1:  Info. on File1
> File3:  Info. on File3
> File1:  Info. on File1
> and so on...
> ===============================
>
> I want to display the output as...
>
> ============================
> n1 lines of info on File1
> n2 lines of info on File2
> n3 lines of info on File3
> ============================
>
> This is what I came up with, but when the input log file is of
> gigantic proportions, the parsing takes a lot of time, could anyone
> recommend a better solution, please?

[snip program]


Whenever you see "unique" you should automatically think "hash". For your
problem that means a better data structure would be a hash of (references to
arrays).


In your program you are looping through the looping through list half a
dozen times, including a read, a sort, a grep, and a unique operation.
That's 3n+n*log n already!
Instead you could do the work once while reading the file line by line and
build your target data structure incrementally in linear time.
To do this just read the next line, extract the file name, add this line to
the array that is the hash value for this file name.
When done reading the whole file just sort the keys of the hash and print
each value in sequence (pseudo-code for clarifying the logical program flow,
not fit and polished Perl!):

open FDL or die ....;
while ( <FDL>) {          # for each line
    ($fname) = split (/:/, $_, 2);     #get the file name
    push @{$myhash{$fname}}, $_;     #and push the current line into the
hash at key $fname
}
for (sort (keys (%myhash))) {         #for each file name in sorted order
    print @{$myhash{$fname}};     #print the array with the lines
}





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

Date: 20 Nov 2003 16:31:21 GMT
From: Glenn Jackman <xx087@freenet.carleton.ca>
Subject: Re: Comments on parsing solution.
Message-Id: <slrnbrpr47.cjj.xx087@smeagol.ncf.ca>

Prabh <Prab_kar@hotmail.com> wrote:
>  I do have a solution, but I was wondering if anyone could direct me to
>  a more efficient one.
>  I have a log file of the following format, which contains info. on a
>  series of files after a process.
>  
> ===============================
>  File1:  Info. on File1
>  File2:  Info. on File2
>  File1:  Info. on File1
>  File3:  Info. on File3
>  File1:  Info. on File1
>  and so on...
> ===============================
>  
>  I want to display the output as...
>  
> ============================
>  n1 lines of info on File1
>  n2 lines of info on File2
>  n3 lines of info on File3
> ============================

    #!/usr/local/bin/perl
    use strict;
    use warnings;
    
    # always check the return value of open()
    open F, "file" or die "can't open file: $!\n";
    my %hash;
    while (<F>) {
        $hash{(split /:/)[0]} ++;
    }
    close F;
    foreach my $f (sort keys %hash) {
        print "$hash{$f} lines of info on $f\n";
    }


-- 
Glenn Jackman
NCF Sysadmin
glennj@ncf.ca


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

Date: Thu, 20 Nov 2003 17:34:50 +0100
From: Tore Aursand <tore@aursand.no>
Subject: Re: Comments on parsing solution.
Message-Id: <pan.2003.11.20.16.28.22.46067@aursand.no>

On Thu, 20 Nov 2003 06:00:09 -0800, Prabh wrote:
> #!/usr/local/bin/perl

You _need_ this:

  use strict;
  use warnings;

> open(FDL,"Foo.txt") ;
> chomp(@arr = <FDL> ) ;
> close(FDL) ;

Always check the return value of open():

  open( FDL, 'Foo.txt' ) or die "$!\n";

> undef @files ;
> foreach $line ( @arr )  {
>         push(@files,(split(/\:/,$line))[0]) ;
> }

Why do you want to set @files to undefined?  This should do it, and it
keeps @files unique too;

  my @files = ();
  my %seen  = ();
  foreach ( @arr ) {
      my $file = ( split(/\:/) )[0];
      push( @files, $file ) unless ( exists $seen{$file} );
  }

> foreach $file ( &uniq(sort @files ) ) {
>         undef $info ;
>         $info = grep {/^$file\:/} @arr ;
>         printf "$info lines of info on $file\n";
> }

And this could be written as (no need for 'printf'):

  foreach ( sort @files ) {
      my $info = grep { /^$file\:/ } @arr;
      print "$info lines of into on $file\n";
  }

> sub uniq  {

AFAIKT, this won't work if you give it an array of files where two
identical filename doesn't follow each other;

  perldoc -q duplicate

You don't need this function, though, as my code (above) keeps the array
unique at the point it's being populated.


-- 
Tore Aursand <tore@aursand.no>
"A teacher is never a giver of truth - he is a guide, a pointer to the
 truth that each student must find for himself.  A good teacher is
 merely a catalyst." -- Bruce Lee


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

Date: Thu, 20 Nov 2003 11:50:31 -0500
From: Jeff 'japhy' Pinyan <pinyaj@rpi.edu>
To: Prabh <Prab_kar@hotmail.com>
Subject: Re: Comments on parsing solution.
Message-Id: <Pine.SGI.3.96.1031120114231.223454B-100000@vcmr-64.server.rpi.edu>

[posted & mailed]

On 20 Nov 2003, Prabh wrote:

>I have a log file of the following format, which contains info. on a
>series of files after a process.
>
>===============================
>File1:  Info. on File1
>File2:  Info. on File2
>File1:  Info. on File1
>File3:  Info. on File3
>File1:  Info. on File1
>===============================
>
>I want to display the output as...
>
>============================
>n1 lines of info on File1
>n2 lines of info on File2
>n3 lines of info on File3
>============================

>This is what I came up with, but when the input log file is of
>gigantic proportions, the parsing takes a lot of time, could anyone
>recommend a better solution, please?

That's because you slurp the ENTIRE file into memory, which takes time and
space:

>open(FDL,"Foo.txt") ;
>chomp(@arr = <FDL> ) ;
>close(FDL) ;

Then you make an array of the same number of elements, when you should
really be using a hash:

>foreach $line ( @arr )  {
>        push(@files,(split(/\:/,$line))[0]) ;
>}

Then you sort the list of files, and then iterate over the ENTIRE file's
contents for EACH file.

>foreach $file ( &uniq(sort @files ) ) {
>        undef $info ;
>        $info = grep {/^$file\:/} @arr ;
>        printf "$info lines of info on $file\n";
>}

You've now made ONE pass over the file, ONE pass over the array of the
file, and then ANOTHER pass over the array of the file for EACH unique
filename.  For a file with 3 unique names, that's basically FIVE passes.

I would strongly suggest using a hash, and making only ONE pass over the
file:

  #!/usr/bin/perl

  use strict;
  use warnings;

  my %records;

  open FDL, "Foo.txt" or die "can't read Foo.txt: $!";
  while (<FDL>) {
    my ($rec) = split /:/;
    ++$records{$rec};
  }
  close FDL;

  for (keys %records) {
    print "$records{$_} lines of info on $_\n";
  }

Something like that.  You might want to keep an array of the ORDER of the
filenames:

  my (%records, @order);

  open ...;
  while (<FDL>) {
    my ($rec) = split /:/;
    $records{$rec}++ or push @order, $rec;
  }
  close ...;

  for (@order) {
    # ...
  }

-- 
Jeff Pinyan            RPI Acacia Brother #734            2003 Rush Chairman
"And I vos head of Gestapo for ten     | Michael Palin (as Heinrich Bimmler)
 years.  Ah!  Five years!  Nein!  No!  | in: The North Minehead Bye-Election
 Oh.  Was NOT head of Gestapo AT ALL!" | (Monty Python's Flying Circus)



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

Date: 20 Nov 2003 09:12:25 -0800
From: bskorepa@yahoo.com (bruno)
Subject: fork question
Message-Id: <f542e1ac.0311200912.7c43f1e6@posting.google.com>

I have a script that goes over an alphabetical list of symbols.
To speed things up I fork.
In each thread I load a list of symbols. When the last symbol is done,
I get a GPF: "Attempt to free unreferenced scalar"

system win2000, activeperl 5.8
The script runs OK when not forking.


Basically it looks like this:


sub loadTables {
   open (DATEI, "< $infile") or die "Kann Datei $infile nicht öffnen";
   my @symbols = <DATEI>;
   close (DATEI);
	
   foreach (@symbols) {  <-- thats the line where the GPF occurs
      ......
   }
}

Thanks, Bruno


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

Date: Thu, 20 Nov 2003 09:05:05 -0500
From: "Blue Cat" <bluecat22@go.com>
Subject: Re: How to extract info from a HTML input box
Message-Id: <bpihle065j@enews3.newsguy.com>


"Ben Morrow" <usenet@morrow.me.uk> wrote in message
news:bpfvsv$2mn$2@wisteria.csv.warwick.ac.uk...
>
> "Blue Cat" <bluecat22@go.com> wrote:
> > I'm trying to write an HTML page with a PerlScript. Something like what
you
> > see below. How do I do it?
> >
> > <HTML>
> > <SCRIPT LANGUAGE = "PerlScript">
> > Sub DoSomething {
> >       $a = [data recovered from an input box called txrNumber];
> >       $b = [a mathematical operation with $a];
> >       [Put $b into an input box called Result];
> >      }
> > </SCRIPT>
> > <BODY>
> > <INPUT TYPE = TEXT NAME = "txtNumber" SIZE = 25>
> > <INPUT TYPE = BUTTON VALUE = "Click Me" onclick = "DoSomething()"> <BR>
> > <INPUT TYPE = TEXT NAME = "Result" VALUE = 0 SIZE = 25>
> > </BODY>
> > </HTML>
>
> Umm... like that. For information on how to interact with the elements
> on the page, see the documentation for JavaScript in IE and
> translate. The object model is exactly the same.
>
> Ben
>
I tried that and still got fatal errors.




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

Date: Thu, 20 Nov 2003 12:04:53 -0500
From: Chris Mattern <syscjm@gwu.edu>
Subject: Re: How to extract info from a HTML input box
Message-Id: <3FBCF435.3000900@gwu.edu>

Blue Cat wrote:
> "Ben Morrow" <usenet@morrow.me.uk> wrote in message
> news:bpfvsv$2mn$2@wisteria.csv.warwick.ac.uk...
> 
>>"Blue Cat" <bluecat22@go.com> wrote:
>>
>>>I'm trying to write an HTML page with a PerlScript. Something like what
>>
> you
> 
>>>see below. How do I do it?
>>>
>>><HTML>
>>><SCRIPT LANGUAGE = "PerlScript">
>>>Sub DoSomething {
>>>      $a = [data recovered from an input box called txrNumber];
>>>      $b = [a mathematical operation with $a];
>>>      [Put $b into an input box called Result];
>>>     }
>>></SCRIPT>
>>><BODY>
>>><INPUT TYPE = TEXT NAME = "txtNumber" SIZE = 25>
>>><INPUT TYPE = BUTTON VALUE = "Click Me" onclick = "DoSomething()"> <BR>
>>><INPUT TYPE = TEXT NAME = "Result" VALUE = 0 SIZE = 25>
>>></BODY>
>>></HTML>
>>
>>Umm... like that. For information on how to interact with the elements
>>on the page, see the documentation for JavaScript in IE and
>>translate. The object model is exactly the same.
>>
>>Ben
>>
> 
> I tried that and still got fatal errors.
> 
> 
If your problem is that you're getting fatal errors, why didn't you
say so in the first place?  And you *still* haven't deigned to reveal
what errors in particular you're getting.

                   Chris Mattern



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

Date: Thu, 20 Nov 2003 18:09:48 GMT
From: James Willmore <jwillmore@remove.adelphia.net>
Subject: Re: How to pass DBI handle into module
Message-Id: <20031120130948.60b10a0b.jwillmore@remove.adelphia.net>

On Thu, 20 Nov 2003 11:59:10 +0200
"Roman Khutkyy" <roman@sky.lviv.ua> wrote:

> Hi,
> i'm trying to collect some modules in one project main.pl, each uses
> DBI connection to the same databse but with different querries. Is
> it possible to set connection to database once? Now i have to
> declare  'use DBI' in main.pl . Then i make new connection
> > $query*=$dbh*->prepare(***),
> and disconnect the query in each module. But error_log exist the
> string:
> >Database handle destroyed without explicit disconnect.
> When i make DBI handle $dbh in main.pl, and try to make new query in
> module i get the message:
> > Can't call method "prepare" on an undefined value
> Can anybody help?

When you 'connect' to a database, the connection is good until you a)
exit the script, b) call 'disconnect'.  Unless you fulfill either of
these conditions, you're connection will remain.

What I think you're looking to do is call many queries and do
something with the data results.  if this is the case, then all you
need to do is make separate scalar values for each 'prepare'
statement.  For example:

$select_dogs = 
    $dbh->prepare("select * from animals where type='dog'");
$select_cats = 
    $dbh->prepare("select * from animals where type='cat'");

Now you have two separate select statements prepared.  Just use the
proper scalar value to get the data needed.

Hopfully, I explained this in a way that can be understood :-)

Read the DBI documentation for more information.

HTH

-- 
Jim

Copyright notice: all code written by the author in this post is
 released under the GPL. http://www.gnu.org/licenses/gpl.txt 
for more information.

a fortune quote ...
There are times when truth is stranger than fiction and lunch
time is one of them. 


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

Date: Thu, 20 Nov 2003 17:32:18 GMT
From: Sean O'Dwyer <notspam@spamfree.dud>
Subject: Perl Sendmail Question
Message-Id: <notspam-40E364.12335520112003@news-server.si.rr.com>

In trying to get bounces from bad e-mail addresses sent back to their 
original sender instead of the server's admin -- this is a small 
distributed content situation, not spam! -- I'm looking at getting 
sendmail to send the original outgoing e-mail in the following way. 
Instead of...

$mailprog = '/usr/lib/sendmail -t';

 ...in my script, I'd use...

$mailprog = "/usr/lib/sendmail -f myname\@mydomain.com -t";

Is this correct? And does the myname@mydomain.com address have to be a 
"trusted user" on the server or can it be any e-mail address?

Thanks in advance,

Sean


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

Date: 20 Nov 2003 17:38:44 GMT
From: Abigail <abigail@abigail.nl>
Subject: Re: Perl Sendmail Question
Message-Id: <slrnbrpv14.7ju.abigail@alexandra.abigail.nl>

Sean O'Dwyer (notspam@spamfree.dud) wrote on MMMDCCXXXIII September
MCMXCIII in <URL:news:notspam-40E364.12335520112003@news-server.si.rr.com>:
__  In trying to get bounces from bad e-mail addresses sent back to their 
__  original sender instead of the server's admin -- this is a small 
__  distributed content situation, not spam! -- I'm looking at getting 
__  sendmail to send the original outgoing e-mail in the following way. 
__  Instead of...
__  
__  $mailprog = '/usr/lib/sendmail -t';
__  
__  ...in my script, I'd use...
__  
__  $mailprog = "/usr/lib/sendmail -f myname\@mydomain.com -t";
__  
__  Is this correct? And does the myname@mydomain.com address have to be a 
__  "trusted user" on the server or can it be any e-mail address?


Do you have a Perl question? Or are just posting your sendmail 
question to random groups, in the hope someone will be foolish
enough to answer off topic posts?

Why don't you post this in a group that deals with MTA's?



Abigail
-- 
package Just_another_Perl_Hacker; sub print {($_=$_[0])=~ s/_/ /g;
                                      print } sub __PACKAGE__ { &
                                      print (     __PACKAGE__)} &
                                                  __PACKAGE__
                                            (                )


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

Date: Thu, 20 Nov 2003 17:46:42 GMT
From: James Willmore <jwillmore@remove.adelphia.net>
Subject: Re: Perl Sendmail Question
Message-Id: <20031120124642.1c009399.jwillmore@remove.adelphia.net>

On Thu, 20 Nov 2003 17:32:18 GMT
Sean O'Dwyer <notspam@spamfree.dud> wrote:

> In trying to get bounces from bad e-mail addresses sent back to
> their original sender instead of the server's admin -- this is a
> small distributed content situation, not spam! -- I'm looking at
> getting sendmail to send the original outgoing e-mail in the
> following way. Instead of...
> 
> $mailprog = '/usr/lib/sendmail -t';
> 
> ...in my script, I'd use...
> 
> $mailprog = "/usr/lib/sendmail -f myname\@mydomain.com -t";
> 
> Is this correct? And does the myname@mydomain.com address have to be
> a "trusted user" on the server or can it be any e-mail address?

This is more of a sendmail question (which is *not* Perl) than a Perl
question :-)
 
> Thanks in advance,

Just a suggestion ....
use one of the *many* email modules instead of using a system command
to sendmail.  Then, you reduce the amount of issues you have sending
email.

-- 
Jim

Copyright notice: all code written by the author in this post is
 released under the GPL. http://www.gnu.org/licenses/gpl.txt 
for more information.

a fortune quote ...
Kin, n.:  An affliction of the blood 



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

Date: Thu, 20 Nov 2003 19:03:49 +0100
From: Gunnar Hjalmarsson <noreply@gunnar.cc>
Subject: Re: Perl Sendmail Question
Message-Id: <bpj07s$1p0fog$1@ID-184292.news.uni-berlin.de>

Sean O'Dwyer wrote:
> In trying to get bounces from bad e-mail addresses sent back to
> their original sender instead of the server's admin -- this is a
> small distributed content situation, not spam! -- I'm looking at
> getting sendmail to send the original outgoing e-mail in the
> following way.

<snip>

I don't know if you can control the return-path in the way you
describe. One thing I do know, and that may justify this topic in
clpmisc, is that by using the Perl module Mail::Sender you can easily
set the return-path.

A couple of years ago I too tried to do that when sending via
sendmail, but since I found the just mentioned method, I quit my attempts.

-- 
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl



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

Date: 20 Nov 2003 18:06:45 GMT
From: ctcgag@hotmail.com
Subject: Re: Protecting Source code of a perl script
Message-Id: <20031120130645.330$nD@newsreader.com>

"Eric J. Roode" <REMOVEsdnCAPS@comcast.net> wrote:
> Hash: SHA1
>
> Senthilraja <senthil.raja@adcc.alcatel.be> wrote in
> news:3FBB1913.2CF04140 @adcc.alcatel.be:
>
> > I've written a perl script for a high security application and hence I
> > want to protect the source code of the perl script, even from the
> > administrator of the application.

Is the administrator of the application also the administrator of the
machine on which the application runs?  How can an application be
considered secure if you don't trust the person who is in charge of it?


> What makes you think that hiding the source code will make your
> application more secure?

Reality.

> Typically, a dedicated cracker will figure out
> what the program is doing and find a way around it anyhow,

True, and a dedicated lock-picker can pick my lock.  But I'd prefer not
to make the parts transparent, as that would lower the bar for how
dedicated he would have to be.

> while your
> program may not be reviewed for bugs or security holes by your peers.

It seems like a rather unlikely event that some kind-hearted person is
going to stumble upon your code uninvited, find the holes, and point them
out to you.  Premeditated code review is a great thing, but in the absense
of it, it's hard to see how making the code available to untrustworthy
parties is a good thing.

Xho

-- 
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service              New Rate! $9.95/Month 50GB


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

Date: 20 Nov 2003 18:10:45 GMT
From: ctcgag@hotmail.com
Subject: Re: Protecting Source code of a perl script
Message-Id: <20031120131044.987$Ih@newsreader.com>

rgarciasuarez@free.fr (Rafael Garcia-Suarez) wrote:
> Senthilraja wrote:
> >I've written a perl script for a high security application and hence I
> >want to protect the source code of the perl script, even from the
> >administrator of the application.
> >
> >Is there any way to convert the perl script source into some sort of exe
> >or binary file, without affecting the functioning of the script?
>
> Forget about it.
>
> Moreover, security through obscurity just does not work.

I think security by obscurity is about the only thing that does
work.  The obscurity of the private key is how public/private key
systems work.  The obscurity of the password is how most log-on
authentication systems work.

Xho

-- 
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service              New Rate! $9.95/Month 50GB


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

Date: Thu, 20 Nov 2003 18:25:32 GMT
From: James Willmore <jwillmore@remove.adelphia.net>
Subject: Re: Protecting Source code of a perl script
Message-Id: <20031120132532.6312f548.jwillmore@remove.adelphia.net>

On 20 Nov 2003 18:10:45 GMT
ctcgag@hotmail.com wrote:

> rgarciasuarez@free.fr (Rafael Garcia-Suarez) wrote:
> > Senthilraja wrote:
> > >I've written a perl script for a high security application and
> > >hence I want to protect the source code of the perl script, even
> > >from the administrator of the application.
> > >
> > >Is there any way to convert the perl script source into some sort
> > >of exe or binary file, without affecting the functioning of the
> > >script?
> >
> > Forget about it.
> >
> > Moreover, security through obscurity just does not work.
> 
> I think security by obscurity is about the only thing that does
> work.  The obscurity of the private key is how public/private key
> systems work.  The obscurity of the password is how most log-on
> authentication systems work.

You mis-understand what 'obscurity' is in the context used.  You don't
'obscure' the password, you *protect* the password (or *secure* if you
like).  Obscurity, in the context used, is 'hide'.  You 'hide' nothing
in a good and solid security model.  

For eaxmple: You may, in fact, be able to 'see' the password, but are
unable to *use* the password for other reasons.  Maybe you don't have
the proper key file - which you are supposed to 'see', but don't have.
 Maybe the box you are using is not authorized to use the application
- in which case, knowing the password is worthless because you can't
execute the application.  So, there's no 'obscurity' involved.

Security should be layered and not rely on 'hiding' anything. 
Protection is the key.  Anything 'hidden' will eventually be 'found'.

Just my $0.02 ....

-- 
Jim

Copyright notice: all code written by the author in this post is
 released under the GPL. http://www.gnu.org/licenses/gpl.txt 
for more information.

a fortune quote ...
The Army needs leaders the way a foot needs a big toe.   -- Bill 
Murray 


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

Date: Thu, 20 Nov 2003 15:05:19 +0100
From: rs@plusw.de
Subject: Re: Sorting an array
Message-Id: <bpihmv$ivj$05$1@news.t-online.com>

Bob Van Der Ploeg wrote:

> How can I get perl to sort an array based on the second value inthe array?
> example
> 
> @array=(201,1,635,4,987,3,407,2);
>                       ^        ^        ^        ^
> 
> Result I want is (201,1,407,2,987,3,635,4);
> 
> Would this be easier to sort if it were a multi-demsional array?
> 
>  @array=([201,1],[635,4],[987,3],[407,2])
> 
> If so how do I sort a multi-demensional array?
You can turn the array into a hash sort the hash and make an array again. 
Since you should sort the keys and not the values and the order in your 
aray is value, key,... just revers the array :

@array=(201,1,635,4,987,3,407,2);
my %hash = reverse @array;
my @sorted_array = map { $hash{$_}, $_ } sort keys %hash;
print join (',', @array), "\n";
print join (',', @sorted_array), "\n";

gives :
201,1,635,4,987,3,407,2
201,1,407,2,987,3,635,4

Greetings Rolf



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

Date: 20 Nov 2003 14:14:59 GMT
From: anno4000@lublin.zrz.tu-berlin.de (Anno Siegel)
Subject: Re: Sorting an array
Message-Id: <bpii93$41b$1@mamenchi.zrz.TU-Berlin.DE>

Bob Van Der Ploeg <bob@vdpcorp.com> wrote in comp.lang.perl.misc:
> How can I get perl to sort an array based on the second value inthe array?
> example

That sentence takes a lot of benign interpretation to make sense of.

> @array=(201,1,635,4,987,3,407,2);
>                       ^        ^        ^        ^

Marking text only works with a fixed width font.  You are not using one,
the "^" appear nowhere near they should be.

> Result I want is (201,1,407,2,987,3,635,4);

So you want *pairs* of elements sorted according to the value of the
first element?

> Would this be easier to sort if it were a multi-demsional array?
> 
>  @array=([201,1],[635,4],[987,3],[407,2])

It would. Untested:

    map @$_, sort { $a->[ 0] <=> $b->[ 0] } @array;

The "map" is there to put the list of pairs back into flat format.
Leave it out if you want to keep the pairs.

> If so how do I sort a multi-demensional array?

Sorting is simple, the harder part is making the array of pairs.  That
requires dealing with an error condition (odd number of elements given)
for one thing.

It is easier to use a hash, since transformation of a list of pairs
to a hash is built into Perl, error checking and all.  Also untested:

    my %h = @array;
    map { ($_, $h{ $_}) } sort { $a <=> $b } keys %h;


Anno


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

Date: Thu, 20 Nov 2003 11:34:44 -0500
From: Jeff 'japhy' Pinyan <pinyaj@rpi.edu>
To: Bob Van Der Ploeg <bob@vdpcorp.com>
Subject: Re: Sorting an array
Message-Id: <Pine.SGI.3.96.1031120112446.223454A-100000@vcmr-64.server.rpi.edu>

[posted & mailed]

On Thu, 20 Nov 2003, Bob Van Der Ploeg wrote:

>How can I get perl to sort an array based on the second value inthe array?
>example
>
>@array=(201,1,635,4,987,3,407,2);
>Result I want is (201,1,407,2,987,3,635,4);
>
>Would this be easier to sort if it were a multi-demsional array?

Yes, but it *can* be done with your flat array:

  my @sorted_idx = sort {
    # we want ODD indices, so this turns 2 into 3, and 3 stays 3
    my ($i, $j) = ($a | 1, $b | 1);

    # if we were dealing with a pair like (201, 1)
    # then compare the INDICES ($a and $b).
    # if $i != $j, then we compare the VALUES (1, 2, 3, 4, ...)
    $i == $j ? ($a <=> $b) : ($array[$i] <=> $array[$j]);
  } @array;

  my @sorted = @array[@sorted_idx];

But I don't suggest this.  I'd use the array of array-refs.

-- 
Jeff Pinyan            RPI Acacia Brother #734            2003 Rush Chairman
"And I vos head of Gestapo for ten     | Michael Palin (as Heinrich Bimmler)
 years.  Ah!  Five years!  Nein!  No!  | in: The North Minehead Bye-Election
 Oh.  Was NOT head of Gestapo AT ALL!" | (Monty Python's Flying Circus)



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

Date: 20 Nov 2003 06:56:37 -0800
From: x78o99b3@yahoo.ca (Joshua Sparks)
Subject: Re: trying to grep a $line for $line...any ideas?
Message-Id: <46966a85.0311200656.23bee1c9@posting.google.com>

Hey, Sam... perfecto... I was pretty close in my orinal code attempt. 
I was doing a pass on my exceptions file for each line in my good
file... waste of memory... and the "index" concept was new to me as
well...

thanks a bunch

sholden@flexal.cs.usyd.edu.au (Sam Holden) wrote in message news:<slrnbrof2t.2qb.sholden@flexal.cs.usyd.edu.au>...
> On Thu, 20 Nov 2003 03:02:42 GMT, Joshua Sparks <nacs@nb.sympatico.ca> wrote:
> > consider 2 "text" files.
> > 
> > INPUT contains:
> > 
> > My name is
> > Hello you dolt
> > Learning perl is difficult
> > I love my job
> > 
> > INPUT2 contains:
> > 
> > name is
> > dolt
> > perl
> > 
> > What I want to do is test each line of INPUT to see if it contains the exact
> > contents of each line of INPUT2.  In Pseudo-code it would be
> 
> Read INPUT2 into an array and then read INPUT line by line checking each
> line against each element in the array. 
> 
> > 
> > for each line L1 in INPUT
> >     boolean_found <- false
> >     for each line L2 in INPUT2
> >        if L2 in L1
> >             boolean_found <- true
> >       endif
> >    end
> > end
> > 
> > if boolean_found = false
> >   do some more stuff with L1
> 
> Turn it into perl (moving the if into the loop where it belongs):
> 
> #read needles
> open INPUT2, "input2.txt" or die "Unable to open input2.txt: $!";
> chomp (my @needles = <INPUT2>);
> close INPUT2;
> 
> # open haystack
> open INPUT, "input.txt" or die "Unable to open input.txt: $!";
> 
> # the line by line psuedo code conversion...
> foreach my $line1 (<INPUT>) {
> 	my $boolean_found = 0;
> 	foreach my $line2 (@needles) {
> 		if (index($line1, $line2) != -1) {
> 			$boolean_found = 1;
> 		}
> 	}
> 	if ($boolean_found == 0) {
> 		# do some stuff with $line1
> 	}
> }
> 
> close INPUT;
> 
> The only "tricky" bit how to express L2 in L1, using index seems reasonable
> to me, though you could also use a regex.
> 
> The outer foreach is inneficient as it reads the entire file at once, so
> we can make a simple optimisation by converting it into a while, and
> once a match is found there's no need to keep looking so we can
> add a last, and the "== 0" is ugly, we can replace it with if (!...) or
> unless (...). And the name boolean_found is long, replace with found.:
> 
> while (my $line1 = <INPUT>) {
> 	my $found = 0;
> 	foreach my $line2 (@needles) {
> 		if (index($line1, $line2) != -1) {
> 			$found = 1;
> 			last;
> 		}
> 	}
> 	unless ($found) {
> 		# do some stuff with $line1
> 	}
> }
> 
> We could reduce the nesting by moving the search over the array into
> a function such as:
> 
> sub contains_a_needle {
> 	my $line = shift;
> 	foreach (@needles) {
> 		return 1 if index($line,$_) != -1;
> 	}
>  return;
> }
> 
> Then the main loop simplifies to:
> 
> while (my $line = <INPUT>) {
> 	unless (contains_a_needle($line)) {
> 		# do some stuff with $line
> 	}
> }
> 
> Or even:
> 
> for my $line (grep !contains_a_needle($_), <INPUT>) {
> 	# do some stuff with $line
> }
> 
> At the cost of slurping the file into memory again.


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

Date: Thu, 20 Nov 2003 18:41:39 +0000 (UTC)
From: Ben Morrow <usenet@morrow.me.uk>
Subject: Re: trying to understand fork and wait
Message-Id: <bpj1t3$7te$1@wisteria.csv.warwick.ac.uk>


jguad98@hotmail.com (John) wrote:
> #!/usr/local/bin/perl
> #=================================================================#

You don't need all these: they really don't make things any clearer.

You do need

  use warnings;
  use strict;

> #-----------------------------------------------------------------
> # some global vars
> #-----------------------------------------------------------------
>   $mypid=$$;

  my $mypid = $$;

and so on throughout.

>   $basedir="/paf/rpas";
>   @domainlist=`ls $basedir | egrep '^(top|key)..$'`;

  my @domainlist = <$basedir/{top,key}??>;

see perldoc -f glob

>   $patternfile="/path/to/patterns.list";
>   open(PATTERNS,$patternfile);

  open my $PATTERNS, $patternfile or die "can't open pattern file: $!";

>   @patternlist=<PATTERNS>; # this is my store of error messages to
> watch for
>   close(PATTERNS);
> #-----------------------------------------------------------------
> # scan the directories
> #-----------------------------------------------------------------
>   foreach $domain (@domainlist) {

  for my $domain (@domainlist) {

>     chomp($domain);
>     $userdirbase="$basedir/$domain/users";
>     opendir(USERS, "$userdirbase");
>     #-------------------------------------------------------------
>     # read the dir
>     #-------------------------------------------------------------
>     while ($file = readdir(USERS)) {
>         #---------------------------------------------------------
>         # only select files matching the username pattern
>         #---------------------------------------------------------
>         next unless $file =~ /^[a-z][a-z]\d\d\d\d\d$/;

  /^[a-z][a-z]\d{5}$/

>         #---------------------------------------------------------
>         # check if we have a user dir
>         #---------------------------------------------------------
>         $currentuserdir="$userdirbase/$file";
>         if (-d "$currentuserdir") {
>             #-----------------------------------------------------
>             # check if there is an applog in the user dir
>             #-----------------------------------------------------
>             $logfile="$currentuserdir/applog";
>             if ( -e "$logfile") {
>                 #-------------------------------------------------
>                 # is the log open or closed?
>                 #-------------------------------------------------
>                 $return=`grep 'known end of session message'
> $logfile`;

Better than this would be to delete the log when it finishes; unless
you need to keep them, in which case I would lock the logfile while
the child reads it.

>                 #-------------------------------------------------
>                 # if open, fire the monitor
>                 #-------------------------------------------------
>                 if (! $return) { # the grep failed, ergo the file is
> active

grep exits with 0 if it succeeds, so this test is precisely backwards
:).

>                   #-------------------------------------------------
>                   # line below is because everything I've read about
> fork
>                   # says I gotta wait on the child pid (?) or it will
>                   # become a zombie which is bad.  I don't understand
>                   # what this does or how it works.
>                   #-------------------------------------------------
>                   $SIG{'CHLD'} = sub { wait(); };

When a process exits, it returns a status code (like grep exitted with
0 or 1 above). The parent process can collect this by calling wait or
waitpid. Until it does, the process has to sit around occupying a slot
in the process table, just to keep a hold of the exit code. So, for
instance, the system() call above does (NB this is simplified C)

pid = fork();
if(pid)
  return waitpid(pid);
else
  exec("grep", ...);

internally.

The easy way to solve this is $SIG{CHLD} = 'IGNORE';, which says you
don't care about exit codes. That fails on some systems, though; if it
does you need to read the discussion under 'Signals' in perldoc perlipc.

>                   #-------------------------------------------------
>                   # now we fork if and only if we are the original
> program
>                   # we consider ourselves too young to have
> grandchildren
>                   #-------------------------------------------------
>                   if ($$ == $mypid) {
>                     $kidpid = fork() or die "cannot fork: $!";

This is wrong. fork returns 0 to the child, <pid> > 0 to the parent and
undef if it fails. Children will always die, with this... You want

my $kidpid = fork;
defined $kidpid or die "cannot fork: $!";

# From this point on we have two almost identical copies of the
# program running. The only difference is that one has $kidpid set to
# 0, the other to some positive number.

if($kidpid) {
    # parent
} else {
    # child
}

which is why you need two blocks in general. In your case, the parent
doesn't want to do anything but loop round again, and the child loops
over a file and exits. So you want <untested>

unless($kidpid) {   # if we are the parent, just loop back
    open my $LOG, $file or die "can't open logfile $file: $!";

    while ( (my $line = <LOG>) !~ /known EOS/ ) {
        my $now = localtime;

        system "logger $now $domain $user $line" 
            for grep { $line =~ /$_/ } @patternlist;
        # or you would probably be better off using Sys::Syslog
    }

    close $LOG;   #
    unlink $file; # if you decide to delete them when you're done

    exit 0; # so we won't get out into the parent's code
}

and ditch all this...

>                   } else {
>                     #-------------------------------------------------
>                     # are we in the child process?
>                     #-------------------------------------------------
>                     if ($kidpid == 0) {
>                       #---------------------------------------------
>                       # read the user log
>                       #---------------------------------------------
>                       open(LOG,"$file");
>                       while ($line = <LOG>) {
>                         close(LOG), exit if ($line =~ /known EOS
> message/);
>                         foreach $patt (@patternlist) {
>                           if ($line =~ /$patt/) {
>                             $now=localtime(time);
>                             system("logger $now $domain $user $line");
>                           }#end child's if pattern match
>                         }#end child's foreach loop
>                       }#end child's while loop
>                     }# this is the end of the child block
>                   }#end if mypid
>                 }#end if $return
>             }#end if logfile exists
>         }#end if directory (go to top of parent while loop)
>     } #end parent while loop (go to top of parent foreach loop)

 ...down to here.

>     closedir(USERS); 
>   }#end parent foreach loop
> #-----------------------------------------------------------------
>   exit 0;

No need for this: 'falling off the end' is a perfectly valid way to
end a Perl program.

> #== EOF ==========================================================#

<snip>

> Will "wait" make me wait for a return or not?

Yes. waitpid() will wait for the specified child process to exit and
return its exitcode; wait() (or waitpid with a pid of -1) will wait
for *any* child to exit and return its exitcode. Depending on your
system, if you are ignoring SIGCHLD both may return -1.

See wait(2).

> I have not actually run the above program mostly because I don't
> understand how the wait & fork will work and I fear unintended
> consequences.

Heh. :) When learning things like this, you need a test box to try
stuff on. Remember, you can always kill the parent process, and then
mop up the childen, if it starts doing things you don't expect.

Ben

-- 
If I were a butterfly I'd live for a day, / I would be free, just blowing away.
This cruel country has driven me down / Teased me and lied, teased me and lied.
I've only sad stories to tell to this town: / My dreams have withered and died.
  ben@morrow.me.uk   <=>=<=>=<=>=<=>=<=>=<=>=<=>=<=>=<=>=<=>=<=>   (Kate Rusby)


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

Date: Thu, 20 Nov 2003 23:58:51 +0800
From: "Xiao" <xthua111@sohu.com>
Subject: use perl script interactive with a program like mplayer
Message-Id: <bpiodl$j08$1@mail.cn99.com>

I want to use perl to start mplayer ,and interactive it.

'exec' 'system' maybe not suit for that.
i look at the FAQ and 'exec' and 'system's' man page,find they only return
some value.

e.g. when i input 'p' ,the mplayer will pause in normal satuation.
i want to get the effect in my perl script.
would anyone like to give me some advise ,or some urls ,or some keywords for
search ,or some module names?
thank you very much
kenneth









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

Date: Thu, 20 Nov 2003 23:58:51 +0800
From: "Xiao" <xthua111@sohu.com>
Subject: use perl script interactive with a program like mplayer
Message-Id: <bpione$j80$1@mail.cn99.com>

I want to use perl to start mplayer ,and interactive it.

'exec' 'system' maybe not suit for that.
i look at the FAQ and 'exec' and 'system's' man page,find they only return
some value.

e.g. when i input 'p' ,the mplayer will pause in normal satuation.
i want to get the effect in my perl script.
would anyone like to give me some advise ,or some urls ,or some keywords for
search ,or some module names?
thank you very much
kenneth









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

Date: Thu, 20 Nov 2003 17:55:17 GMT
From: James Willmore <jwillmore@remove.adelphia.net>
Subject: Re: use perl script interactive with a program like mplayer
Message-Id: <20031120125517.049ccc4d.jwillmore@remove.adelphia.net>

On Thu, 20 Nov 2003 23:58:51 +0800
"Xiao" <xthua111@sohu.com> wrote:

> I want to use perl to start mplayer ,and interactive it.
> 
> 'exec' 'system' maybe not suit for that.
> i look at the FAQ and 'exec' and 'system's' man page,find they only
> return some value.
> 
> e.g. when i input 'p' ,the mplayer will pause in normal satuation.
> i want to get the effect in my perl script.
> would anyone like to give me some advise ,or some urls ,or some
> keywords for search ,or some module names?
> thank you very much
> kenneth

Huh?  You can use either to *start* the mp3 player.  If you want a
solution to pick a file *first*, then play it (or something else with
the file, etc., etc.), then search CPAN.
http://search.cpan.org/

HTH

-- 
Jim

Copyright notice: all code written by the author in this post is
 released under the GPL. http://www.gnu.org/licenses/gpl.txt 
for more information.

a fortune quote ...
Politicians are the same all over.  They promise to build a
<bridge even where there is no river.  -- Nikita Khrushchev 


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

Date: Thu, 20 Nov 2003 18:52:26 +0000 (UTC)
From: Ben Morrow <usenet@morrow.me.uk>
Subject: Re: use perl script interactive with a program like mplayer
Message-Id: <bpj2ha$7te$2@wisteria.csv.warwick.ac.uk>


"Xiao" <xthua111@sohu.com> wrote:
> I want to use perl to start mplayer ,and interactive it.
> 
> 'exec' 'system' maybe not suit for that.
> i look at the FAQ and 'exec' and 'system's' man page,find they only return
> some value.
> 
> e.g. when i input 'p' ,the mplayer will pause in normal satuation.
> i want to get the effect in my perl script.
> would anyone like to give me some advise ,or some urls ,or some keywords for
> search ,or some module names?
> thank you very much
> kenneth

open my $MPLAYER, "| mplayer" or die "can't fork mplayer: $!";

Ben

-- 
Like all men in Babylon I have been a proconsul; like all, a slave ... During
one lunar year, I have been declared invisible; I shrieked and was not heard,
I stole my bread and was not decapitated.
~ ben@morrow.me.uk ~                   Jorge Luis Borges, 'The Babylon Lottery'


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

Date: Thu, 20 Nov 2003 16:34:06 -0000
From: "Richard S Beckett" <spikeywan@bigfoot.com.delete.this.bit>
Subject: Win32-OLE equivalent of write_row
Message-Id: <bpiqgq$fbe$1@newshost.mot.com>

Guys,

Using Spreadsheet::WriteExcel, I can insert an array of unknown length into
a row with:

$page->write_row(0, 5, $temp);
Where $temp = \@temp;

Is the same thing possible with Win32::OLE?

When I tried:
$page -> Range  ("F1:AZ1") -> {Value} = [@temp];

I got #N/A in the last few cells.

Thanks.
-- 
R.
GPLRank +79.699




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

Date: Thu, 20 Nov 2003 17:51:27 GMT
From: James Willmore <jwillmore@remove.adelphia.net>
Subject: Re: Win32-OLE equivalent of write_row
Message-Id: <20031120125127.3dc9d994.jwillmore@remove.adelphia.net>

On Thu, 20 Nov 2003 16:34:06 -0000
"Richard S Beckett" <spikeywan@bigfoot.com.delete.this.bit> wrote:

> Guys,

and Gals :-)

> 
> Using Spreadsheet::WriteExcel, I can insert an array of unknown
> length into a row with:
> 
> $page->write_row(0, 5, $temp);
> Where $temp = \@temp;
> 
> Is the same thing possible with Win32::OLE?
> 
> When I tried:
> $page -> Range  ("F1:AZ1") -> {Value} = [@temp];
> 
> I got #N/A in the last few cells.
> 

This *may* be nothing more than cell width.  Have you expanded the
cells in question to see if the data is there?

*If* you have, then you *might* need to loop through the @temp array
and fill each cell individually.

Just my $0.02 ...

HTH

-- 
Jim

Copyright notice: all code written by the author in this post is
 released under the GPL. http://www.gnu.org/licenses/gpl.txt 
for more information.

a fortune quote ...
Remember:  Silly is a state of Mind, Stupid is a way of Life.  
<-- Dave Butler 


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

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.  

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 V10 Issue 5835
***************************************


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