[7545] in Perl-Users-Digest
Perl-Users Digest, Issue: 1171 Volume: 8
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Mon Oct 13 23:08:01 1997
Date: Mon, 13 Oct 97 20:00:22 -0700
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Mon, 13 Oct 1997 Volume: 8 Number: 1171
Today's topics:
Re: 2000 time problem <ludlow@us.ibm.com>
5.004 test failure on Linux 2.0.30 (Huu Da Tran)
[Q] Search/replace within text file <a-grayson@nwu.edu>
Re: Date to integer (brian d foy)
Help with MacPerl help (David Merberg)
Re: Need RE to change overstrikes to HTML (Harold Bamford)
Re: Need RE to change overstrikes to HTML <usenet-tag@qz.little-neck.ny.us>
NEWBIE: How to read a file into a scalar (Tikki tikki tembo-no sa rembo-chari bari ruchi-pip peri pembo)
NT IO/backticking <daf@altagroup.com>
Re: Passing a filehandle as an argument? (Charles DeRykus)
printf ("%-${n}s %4d %-$bl s\n", $names, ($k+1), $seq); <jong@mrc-lmb.cam.ac.uk>
PTY object for perl (Karl Hakimian)
Quick Question About tr/// <pinky@mail.usmo.com>
Re: Quick Question About tr/// <ase@seanet.com>
Re: reg exp size limit !? <usenet-tag@qz.little-neck.ny.us>
Reg expr. question (SEARCH and REPLACE) <vscarpenter@qgraph.com>
Re: s/ / /g or tr/ / / what is the difference? <jefpin@bergen.org>
uninitialized value warning for m// substrings (Ken Irving)
unix lynx perl cgi html ??? (David Archer)
Re: unix lynx perl cgi html ??? (Tad McClellan)
Digest Administrivia (Last modified: 8 Mar 97) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Mon, 13 Oct 1997 17:54:31 -0500
From: James Ludlow <ludlow@us.ibm.com>
Subject: Re: 2000 time problem
Message-Id: <3442A6A7.2B56@us.ibm.com>
Bremen Lee wrote:
>
> Hi,
>
> I try to use ctime and localtime to generate the time in Win32 Perl.
> I found that it will output wrong date when I set my win95 to 2050.
>
> Do you know is there any other way to generate correct date??
>
> If you have suggestion, please email me at bremenlee@attmail.com.
>
-response emailed-
The function localtime() returns the year minus 1900. So, if your
computer thinks that it's 2050, it's going to return 150 as the year. A
simple way to avoid this would be to subtract 100 if the year is > 99.
#get year
@date = localtime(time);
$year = $date[5];
# check to see if year is in the 2000's
if ($year > 99) {
$year = $year - 100;
}
-James
------------------------------
Date: 14 Oct 1997 01:29:18 GMT
From: tranhu@jsp.umontreal.ca (Huu Da Tran)
Subject: 5.004 test failure on Linux 2.0.30
Message-Id: <slrn645iqb.rnf.tranhu@derby.jsp.umontreal.ca>
I have this little problem that I (as a programmer) have no idea what it
means (perhaps, where it comes from):
[root@tran] 21:22:01 -542- t$ ./perl lib/sdbm.t
1..12
ok 1
ok 2
ok 3
./perl: can't resolve symbol 'Perl_my_memcmp'
Every other test went well. I'll try with 5.004_3, in the mean time, but
if someone could provide help.
Thanks in advance.
__________________________________________________________________________
TRAN, Huu Da Universiti de Montrial
tranhu@jsp.umontreal.ca http://www.jsp.umontreal.ca/~tranhu/
//////////////////////////////////////////////////////////////////////////
La dimocratie est le gouvernement des gens sans iducation, l'aristocratie
est le gouvernement de gens de mauvaise iducation. -- G.K. Chesterton
------------------------------
Date: Mon, 13 Oct 1997 20:10:43 -0500
From: Adam Grayson <a-grayson@nwu.edu>
Subject: [Q] Search/replace within text file
Message-Id: <3442C693.721F4794@nwu.edu>
I am working on a script to open up a semi-database -- actually a text
file set up like this:
value 1a <TAB> value 2a <TAB> value 3a
value 1b <TAB> value 2b <TAB> value 3b
Once a certain action is performed upon one of the database entries
(i.e. value 1b, 2b, 3b), I would like to delete that line from the text
file. The first value on each line is unique within the whole file,
replication of that first value is not a concern in writing the
function.
When I import each line into the script, I set it up as such:
$fields[0]
.
.
$fields[n]
So, if (based on my first example) I was done with the line containing
values 1b, 2b and 3b, I would like the entire second row deleted or
replaced by a series of empty spaces.
Any help would be immensely appreciated.
Thanks
Adam Grayson
P.S. If possible, please reply via e-mail as well as posting a reply to
the newsgroup. Thanks.
------------------------------
Date: Mon, 13 Oct 1997 20:35:23 -0400
From: comdog@computerdog.com (brian d foy)
Subject: Re: Date to integer
Message-Id: <comdog-ya02408000R1310972035230001@news.panix.com>
In article <01bcd819$94abcb80$0101a8c0@sexytop>, "Philippe CADIC" <ccadic@cadic.com.REMOVE.THIS.NOSPAM> wrote:
>Mon Oct 13 22/58:13 MET DST 1997
>
>would be converted into:
>
>19971310
>
>Has any one already programmed this & ?
not only did someone program it, but they made it publically available
through CPAN [1].
[1]
Comprehensive Perl Archive Network
find one near you at <URL:http://www.perl.com>
--
brian d foy <comdog@computerdog.com>
NY.pm - New York Perl M((o|u)ngers|aniacs)* <URL:http://ny.pm.org/>
CGI Meta FAQ <URL:http://computerdog.com/CGI_MetaFAQ.html>
------------------------------
Date: Mon, 13 Oct 1997 20:28:54 -0400
From: dmerberg@genetics.com (David Merberg)
Subject: Help with MacPerl help
Message-Id: <dmerberg-1310972028540001@d12.dial-2.ltn.ma.ultra.net>
I am trying to run MacPerl on a 68K macintosh running system 7.53. My
browser is Netscape 3.01. When I try to use MacPerl's online help,
MacPerl feeds netscape an URL that looks something like this:
pod:///Macintosh%20HD/applications/PD%20software/MacPerl%205%20/pod/perl.pod
But Netscape doesn't know what to do with an URL that starts with pod:///.
I've tried to use the Internet Config utility that comes with MacPerl, but
I still can't get it to work.
Any help would be appreciated.
Thanks
------------------------------
Date: 13 Oct 1997 21:18:06 GMT
From: hbamford@marconi.ih.lucent.com (Harold Bamford)
Subject: Re: Need RE to change overstrikes to HTML
Message-Id: <61u36e$5cj@ssbunews.ih.lucent.com>
In article <61tkfg$pa81@eccws1.dearborn.ford.com>,
Clinton Pierce <cpierce1@cp501.fsic.ford.com> wrote:
>In article <61tf27$grc2@eccws1.dearborn.ford.com>,
> cpierce1@cp501.fsic.ford.com (Clinton Pierce) writes:
>>Given input text that looks like:
>t^Ht^Ht^Hth^Hh^Hh^Hte^He^He^He q^Hq^Hq^Hqu^Hu^Hu^Hui^Hi^Hi^Hic^Hc^Hc^Hck^Hk^Hk^k
Here is a program I have been using. Probably will need local
modification. It is fairly brute force and definitely not elegant, but
it works for me.
#!/opt/nwstools/bin/perl -w
######################################################################
# EMACS_MODES: !fill tabstop=4 c
# @(#)out2html: converts the output of nroff (with overstriking) to html
#
# Harold Bamford, hbamford@lucent.com, (630) 713-1351
######################################################################
######################################################################
# This takes the output of "nroff [options] file.mm | col -x" and
# converts the overstriking sequences to <B>xxx</B> and <I>xxx</I>.
#
# It does NOT put in the <html>, <title>, or <body> tags as that is
# more properly done by the calling program.
#
# This is a fast on-the-fly conversion program for man pages or any
# other nroff-outputable file. Note *nroff*, not *ntroff* or *troff*
######################################################################
use strict;
# Read from STDIN or named file on command line
my(@wholefile) = <>;
my($allfile) = join("",@wholefile);
######################################################################
# We need to identify overstrike sequences of variable length and
# convert them to an intermediate format. The intermediate format
# is of the form: \fBc\fb or \fIc\fi
#
# This intermediate format is easily converted html or other display
# language.
#
# Bold is of the form: x ^H x [^H x [^H x ...]]
# That is, the character, followed by a backspace and the character
# again. The backspace-char sequence can be repeated any number of
# times.
#
# Italic is of the form: _ ^H x
# This makes it look underlined on paper
#
# Bold-Italic is of the form: _ ^H x ^H x [^H x [^H x ...]]
# That is, an italic sequence followed by any number of ^H x sequences to
# overstrike the character (not the underscore).
#
# Do not use $1 inside left pattern -- doesn't work properly. Use \1
# instead. Not sure if this is a perl bug or just poorly documented.
######################################################################
# Bold version of special chars
$allfile =~ s|1(\cH1)+/(\cH/)+4(\cH4)+|\210|g; # 1/4 (M-^H)
$allfile =~ s|1(\cH1)+/(\cH/)+2(\cH2)+|\211|g; # 1/2 (M--)
$allfile =~ s|3(\cH3)+/(\cH/)+4(\cH4)+|\212|g; # 3/4 (M-
$allfile =~ s|\+(\cH_)+(\cH\+)+|\213|g; # plus minus
$allfile =~ s|\+(\cHo)+(\cH\+)+|\214|g; # bullet
$allfile =~ s|j(\cHf)+(\cHj)+|\215|g; # section
# special characters
$allfile =~ s|1/4|\200|g; # 1/4
$allfile =~ s|1/2|\201|g; # 1/2
$allfile =~ s|3/4|\202|g; # 3/4
$allfile =~ s|\+\cH_|\203|g; # plus minus
$allfile =~ s|\+\cHo|\204|g; # bullet
$allfile =~ s|j\cHf|\205|g; # section
# Now catch standard overstrike sequences
$allfile =~ s|_\cH(.)(\cH\1)+|\\fI\\fB$1\\fb\\fi|og; # bold-italic
$allfile =~ s|_\cH(.)|\\fI$1\\fi|og; # italic (underscore)
$allfile =~ s|(.)(\cH\1)+|\\fB$1\\fb|og; # bold (overstrike)
# Sometimes, especially with tbl tables, there are weird overstrike
# situations. This tries to put them in some kind of rational
# format.
$allfile =~ s|(.)\cH([^\1])|$2\cH$2|g; # different char overstrike
# Now do special character translations
$allfile =~ s|&|\&|g; # &
$allfile =~ s|<|\<|g; # <
$allfile =~ s|>|\>|g; # >
$allfile =~ s|"|\"|g; # "
# Now convert intermediate font info to html
$allfile =~ s|\\fB|<B>|g; # font change to BOLD
$allfile =~ s|\\fb|</B>|g; # font change from BOLD
$allfile =~ s|\\fI|<I>|g; # font change to ITALIC
$allfile =~ s|\\fi|</I>|g; # font change from ITALIC
# translate special characters from intermediate code
$allfile =~ s|\200|¼|g; # 1/4
$allfile =~ s|\201|½|g; # 1/2
$allfile =~ s|\202|¾|g; # 3/4
$allfile =~ s|\203|±|g; # plus minus
$allfile =~ s|\204|·|g; # bullet
$allfile =~ s|\205|§|g; # section
# Bold version of special chars
$allfile =~ s|\210|<B>¼</B>|g; # 1/4
$allfile =~ s|\211|<B>½</B>|g; # 1/2
$allfile =~ s|\212|<B>¾</B>|g; # /3/4plus minus
$allfile =~ s|\213|<B>±</B>|g; # plus minus
$allfile =~ s|\214|<B>·</B>|g; # bullet
$allfile =~ s|\215|<B>§</B>|g; # section
# Get emboldened special characters which may not have been caught
# in first pass.
$allfile =~ s|1/4|¼|g; # 1/4
$allfile =~ s|1/2|½|g; # 1/2
$allfile =~ s|3/4|¾|g; # 3/4
# Collapse off/on sequences to make output human readable
$allfile =~ s|</b>(\s*)<b>|$1|ig;
$allfile =~ s|</i>(\s*)<i>|$1|ig;
print $allfile;
--
Harold Bamford
mailto:hbamford@lucent.com
(630)713-1351
http://nwswww.ih.lucent.com/~hbamford/
------------------------------
Date: 14 Oct 1997 02:39:56 GMT
From: Eli the Bearded <usenet-tag@qz.little-neck.ny.us>
Subject: Re: Need RE to change overstrikes to HTML
Message-Id: <eli$9710132212@qz.little-neck.ny.us>
Posted and mailed.
Clinton Pierce <cpierce1@cp501.fsic.ford.com> wrote:
> cpierce1@cp501.fsic.ford.com (Clinton Pierce) writes:
> >Given input text that looks like:
> >t^Ht^Ht^Hh^Hh^Hh^He^He^He^H q^Hq^Hq^Hu^Hu^Hu^Hi^Hi^Hi^Hc^Hc^Hc^Hk^Hk^Hk^H
>
> Typo in the input text!!! All overstrikes, no advances. This is correct:
>
> t^Ht^Ht^Hth^Hh^Hh^Hte^He^He^He q^Hq^Hq^Hqu^Hu^Hu^Hui^Hi^Hi^Hic^Hc^Hc^Hck^Hk^Hk^k
Here's my shot at doing this:
s@ # begin match part
( # capture $1
(?: # a word, don't capture (#2)
(?: # a letter, don't capture (#3)
[^\b] # non-backspace (\b is ^H in character classes only, for REs)
[\b] # backspace
)+ # at least one of #3 (a letter)
[^\b] # non-backspace
)+ # at least one of #2 (a word)
) # end of $1
@ # end match part
# We need to do two things now, remove the backspaces and over written chars,
# and enclose in <b>...</b>.
( $a = $1,
$a =~ s:.[\b]::g,
"<b>$a</b>"
)
@ex # /e => eval replacement part ; /x extended format
Shortened, we have:
s@((?:(?:[^\b][\b])+[^\b])+)@($a=$1,$a=~s:.[\b]::g,"<b>$a</b>")@ex
Now let's test it:
:r! man true | perl -pe \
's@((?:(?:[^\b][\b])+[^\b])+)@($a=$1,$a=~s:.[\b]::g,"<b>$a</b>")@ex' \
| head
TRUE(1L) TRUE(1L)
<b>NAME</b>
true - do nothing, successfully
<b>SYNOPSIS</b>
I'd say it works. Add another set of non-captureing parens if you really
want to grab whole phrases at a time.
Elijah
------
easy :^)
------------------------------
Date: 13 Oct 1997 16:03:42 -0700
From: calliope@leland.Stanford.EDU (Tikki tikki tembo-no sa rembo-chari bari ruchi-pip peri pembo)
Subject: NEWBIE: How to read a file into a scalar
Message-Id: <61u9ce$ac@epic13.Stanford.EDU>
I'm trying to read a text file into a scalar. I was originally just
setting the scalar equal to the filehandle, but I got coredumps when
the file was too big. I tried using the read command from page 170 of
the camel book, but it would only work properly when LENGTH was set to
16000 or less (any more, and the script would hang or give memory
errors), and when the file was smaller than LENGTH.
I am using Perl 5.003 on a machine running HP-UX 10.10. I don't think
any Perl extras have been installed, and I don't have ready access to
anyone with root on the machine. Please help.
Thanks,
Joanna the Frustrated Perl Newbie
--
]:o_ o/
|O = joanna l. salgado __ computer greek (delta gamma) ___|--
|_o= shower philosopher calliope@leland.stanford.edu \
@ `
------------------------------
Date: Mon, 13 Oct 1997 17:04:22 -0700
From: David Ferguson <daf@altagroup.com>
Subject: NT IO/backticking
Message-Id: <3442B706.5EAD@altagroup.com>
I have installed the latest perl release (5.003_07) from the
ActiveWare site and installed it on my NT running 4.0. I am
trying to port some scripts from UNIX and am running into
problems with the backticking. In short, I seem to lose output
when invoked more than one level deep. One script that captures
the backtick output of a system command will properly print that
output. However, a second script, invoking the first within a
set of backticks, does not receive any data. Could anyone give
me any pointers for likely environment errors or just simple
newbie-mistakes that might cause such a situation? Please don't
tell me that I can't do it. Here is a set of scripts that are
about as basic as I could get that reflect the problem.
Test Scripts:
c.pl:
print "arf\n";
b.pl:
chop($bar = `c.pl`;
print "bar is :$bar\n";
chop($who = `id -u -n`);
print "who is :$who\n";
Invoking c.pl produces the following output:
dir> c.pl
arf
dir>
Invokiing b.pl produces the following output:
dir> b.pl
bar is :
who is :GLOBAL\daf
dir>
Any clues as to what I'm doing wrong or where I should go look?
Thanks for any help you can give.
-David Ferguson
------------------------------
Date: Tue, 14 Oct 1997 00:34:55 GMT
From: ced@bcstec.ca.boeing.com (Charles DeRykus)
Subject: Re: Passing a filehandle as an argument?
Message-Id: <EI0My7.DE7@bcstec.ca.boeing.com>
In article <EI09ot.6M2@RnA.NL>, <Gerben_Wierda@RnA.nl> wrote:
> When using strict refs I get:
>
> Can't use string ("STDIN") as a symbol ref while "strict refs" in use at
> ./gord.pl line 69.
>
> On that line it says:
> while (<$::input>) {
>
> Where $::input holds the value "STDIN" which was passed as an argument to the
> function.
>
> This works fine with no strict refs.
>
> So, how do I do
> &some_func( "STDIN");
> &some_func( "SOME_OTHER_FH");
> when using struct refs?
>
which
&some_func( *STDIN ); # or: &some_func( \*STDIN );
which'll create a hard reference. See perlref.
HTH,
--
Charles DeRykus
------------------------------
Date: Tue, 14 Oct 1997 00:30:47 +0100
From: Jong <jong@mrc-lmb.cam.ac.uk>
Subject: printf ("%-${n}s %4d %-$bl s\n", $names, ($k+1), $seq);
Message-Id: <3442AF27.446B@mrc-lmb.cam.ac.uk>
Hi,
It used to work fine with perl5.003,
("%-${n}s")
NOw with perl5.004, it does not work.
I guess perl5.004 tried to be more secure and does not
allow symbolic refer??
Is there any way to get around this in perl5.004?
Thanks a lot.
Jong
--
================
Let's support Free Software Foundation.
http://www.gnu.ai.mit.edu/help/donate.html#BecomeAPatronOfTheFSF
http://www.mrc-lmb.cam.ac.uk:80/genomes/jong/copyleft.html
------------------------------
Date: Tue, 14 Oct 1997 01:59:59 GMT
From: hakimian@eecs.wsu.edu (Karl Hakimian)
Subject: PTY object for perl
Message-Id: <EI0qvz.69A@aha.com>
A project I've been working on uses PTYs and after an unsuccessful
search for a PTY module for perl I decided to write one. (I did find the
Ptty module, but I could not get it to compile on my machine and what I
wanted could be done entirely in perl.)
The included short module does pretty much what I needed, but I have a
couple of questions about ptys on various machines. This module works on
HPUX and Linux but it works differently on the two machines. On the HPs,
I seem to always get an echo when writing to the slave device even if I
do an stty -echo on it. On Linux a read from the master before the slave
is opened in the child returns an EOF, on the HPs it seems to wait. Any
suggestions for getting the module to behave in a "standard" way on
various machines? Any other suggestions for improvements?
-- Cut here for PTY-0.50.shar --
#!/bin/sh
# This is a shell archive (produced by GNU sharutils 4.2).
# To extract the files from this archive, save it to some FILE, remove
# everything before the `!/bin/sh' line above, then type `sh FILE'.
#
# Made on 1997-10-13 18:44 PDT by <hakimian@magnus>.
# Source directory was `/local/users/hakimian/src/perl'.
#
# Existing files will *not* be overwritten unless `-c' is specified.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 3999 -rw------- PTY-0.50/PTY.pm
# 225 -rw------- PTY-0.50/Makefile.PL
# 1476 -rw------- PTY-0.50/test.pl
# 153 -rw------- PTY-0.50/Changes
# 51 -rw------- PTY-0.50/MANIFEST
# 774 -rw------- PTY-0.50/README
#
save_IFS="${IFS}"
IFS="${IFS}:"
gettext_dir=FAILED
locale_dir=FAILED
first_param="$1"
for dir in $PATH
do
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
&& ($dir/gettext --version >/dev/null 2>&1)
then
set `$dir/gettext --version 2>&1`
if test "$3" = GNU
then
gettext_dir=$dir
fi
fi
if test "$locale_dir" = FAILED && test -f $dir/shar \
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
then
locale_dir=`$dir/shar --print-text-domain-dir`
fi
done
IFS="$save_IFS"
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
then
echo=echo
else
TEXTDOMAINDIR=$locale_dir
export TEXTDOMAINDIR
TEXTDOMAIN=sharutils
export TEXTDOMAIN
echo="$gettext_dir/gettext -s"
fi
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
shar_touch=touch
else
shar_touch=:
echo
$echo 'WARNING: not restoring timestamps. Consider getting and'
$echo "installing GNU \`touch', distributed in GNU File Utilities..."
echo
fi
rm -f 1231235999 $$.touch
#
if mkdir _sh21679; then
$echo 'x -' 'creating lock directory'
else
$echo 'failed to create lock directory'
exit 1
fi
# ============= PTY-0.50/PTY.pm ==============
if test ! -d 'PTY-0.50'; then
$echo 'x -' 'creating directory' 'PTY-0.50'
mkdir 'PTY-0.50'
fi
if test -f 'PTY-0.50/PTY.pm' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/PTY.pm' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/PTY.pm' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/PTY.pm' &&
package PTY;
X
use strict;
use Carp;
use IO::File;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
X
require Exporter;
require AutoLoader;
X
@ISA = qw(Exporter AutoLoader);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@EXPORT = qw(
X
);
$VERSION = '0.50';
X
X
# Preloaded methods go here.
X
# Autoload methods go after =cut, and are processed by the autosplit program.
X
1;
# Below is the stub of documentation for your module. You better edit it!
X
=head1 NAME
X
PTY - Perl extension for opening pseudo terminals.
X
=head1 SYNOPSIS
X
X use PTY;
X $pty = new PTY;
X $master_name = $pty->MasterName;
X $slave_name = $pty->SlaveName;
X
X if (fork) {
X $mpty = $pty->FileHandle();
X }
X else {
X # get file handle of slave and close master file handle.
X $spty = $pty->FileHandle(slave => 1);
X }
X
=head1 DESCRIPTION
X
This module creates controls pseudo terminal access from a perl script.
X
The following methods are available.
X
=head2 new
X
This method opens the next available pty and creates a new PTY object.
X
=cut
X
sub new {
X my $that = shift;
X my $class = ref($that) || $that;
X my $self = {};
X
# Open the next available pty.
X
X my $i;
X my $j;
X my $p1 = 'pqrstuvwxyzPQRST';
X my $p2 = '0123456789abcdef';
X my $fh = new IO::File;
X
ptyloop:
X for ($i = 0; $i < length($p1); $i++) {
X
X for ($j = 0; $j < length($p2); $j++) {
X my $ptyname;
X $ptyname = sprintf('/dev/pty%s%s',
X substr($p1, $i, 1), substr($p2, $j, 1));
X $fh->open("+>$ptyname") || next;
X $self->{master_name} = $ptyname;
X $self->{master_handle} = $fh;
X substr($ptyname, 5, 1) = 't';
X $self->{slave_name} = $ptyname;
X last ptyloop;
X }
X
X }
X
X croak "Could not open pseudo terminal." if (!$self->{master_name});
X
X bless $self, $class;
X return $self;
}
X
=head2 MasterName
X
This method returns the name of the master pseudo terminal.
X
=cut
X
sub MasterName {
X my $self = shift;
X return $self->{master_name};
}
X
=head2 SlaveName
X
This method returns the name of the slave pseudo terminal.
X
=cut
X
sub SlaveName {
X my $self = shift;
X return $self->{slave_name};
}
X
=head2 FileHandle
X
This method returns the requested file handle. It accepts the following
argument.
X
=over 4
X
=item slave
X
This argument is a boolean variable. If it is set to true, the master
pseudo terminal file handle is close and the slave file handle is opened
and returned. The slave flag is for use in a child process wishing to
communicate with the master pseudo terminal of its parent process.
X
This argument defaults to false in which case the file handle of the
master pseudo terminal is returned.
X
=back
X
=cut
X
sub FileHandle {
X my $self = shift;
X my %params = @_;
X my $slave = delete $params{slave};
X carp "Extra arguments ignored." if (keys %params) > 0;
X
# This will return undef is we have alread been called with the slave
# flag set to true.
X
X return $self->{master_handle} if (!$slave);
X
X if ($self->{master_handle}) {
X my $fh = $self->{master_handle};
X $fh->close;
X delete $self->{master_handle};
X $fh->open("+>$self->{slave_name}") or croak "$self->{slave_name}: $!";
X $self->{slave_handle} = $fh;
X }
X
X return $self->{slave_handle};
}
X
=head2 Exec
X
This method exects the program passed to it with the standard input and
output set to the file handle of the slave pseudo terminal.
X
It accepts a single argument, the command to be execed.
X
=cut
X
sub Exec {
X my $self = shift;
X my $fh = new IO::File;
X my $cmd = shift;
X
X $self->{master_handle}->close;
X delete $self->{master_handle};
X close(STDIN);
X close(STDOUT);
X close(STDERR);
X
X open(STDIN, $self->{slave_name}) || croak "Can't open stdin.";
X open(STDOUT, ">$self->{slave_name}") || croak "Can't open stdout.";
X open(STDERR, ">$self->{slave_name}") || croak "Can't open stderr.";
X
X $| = 1;
X exec $cmd
X or croak "Exec of $cmd failed.";
}
X
=head1 AUTHOR
X
Karl R. Hakimian <hakimian@aha.com>
X
=head1 SEE ALSO
X
perl(1).
X
=cut
__END__
SHAR_EOF
$shar_touch -am 1010150297 'PTY-0.50/PTY.pm' &&
chmod 0600 'PTY-0.50/PTY.pm' ||
$echo 'restore of' 'PTY-0.50/PTY.pm' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/PTY.pm:' 'MD5 check failed'
480b84d1216e97b5f99b819b44b0e1e2 PTY-0.50/PTY.pm
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/PTY.pm'`"
test 3999 -eq "$shar_count" ||
$echo 'PTY-0.50/PTY.pm:' 'original size' '3999,' 'current size' "$shar_count!"
fi
fi
# ============= PTY-0.50/Makefile.PL ==============
if test -f 'PTY-0.50/Makefile.PL' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/Makefile.PL' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/Makefile.PL' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/Makefile.PL' &&
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
X 'NAME' => 'PTY',
X 'VERSION_FROM' => 'PTY.pm', # finds $VERSION
);
SHAR_EOF
$shar_touch -am 1010112497 'PTY-0.50/Makefile.PL' &&
chmod 0600 'PTY-0.50/Makefile.PL' ||
$echo 'restore of' 'PTY-0.50/Makefile.PL' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/Makefile.PL:' 'MD5 check failed'
8979a66fd9142d118861a29687242250 PTY-0.50/Makefile.PL
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/Makefile.PL'`"
test 225 -eq "$shar_count" ||
$echo 'PTY-0.50/Makefile.PL:' 'original size' '225,' 'current size' "$shar_count!"
fi
fi
# ============= PTY-0.50/test.pl ==============
if test -f 'PTY-0.50/test.pl' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/test.pl' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/test.pl' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/test.pl' &&
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
X
######################### We start with some black magic to print on failure.
X
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
X
BEGIN { $| = 1; print "1..7\n"; }
END {print "not ok 1\n" unless $loaded;}
use PTY;
$loaded = 1;
print "ok 1\n";
X
######################### End of black magic.
X
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
X
$| = 1;
X
$pty = new PTY;
system("stty -echo <" . $pty->SlaveName);
print "ok 2\n";
X
print "not " if !$pty->MasterName;
print "ok 3\n";
X
print "not " if !$pty->SlaveName;
print "ok 4\n";
X
$fh = $pty->FileHandle();
X
if (fork) { # parent
X sleep 1;
X $result = <$fh>;
X chomp($result);
X print "not " if $result ne 'OK SLAVE';
X print "ok 5\n";
X print $fh "OK MASTER\n";
}
else { # child
X $fh = $pty->FileHandle(slave => 1);
X
X print $fh "OK SLAVE\n";
X
X $result = <$fh>;
X $result = <$fh> if ($result =~ /^OK SLAVE/);
X chomp($result);
X print "Result 6 = $result\n";
X print "not " if $result ne 'OK MASTER';
X print "ok 6\n";
X exit;
}
X
wait;
X
if (fork) { # parent
X $fh = $pty->FileHandle();
X
X sleep 1;
X $result = <$fh>;
X chomp($result);
X print "not " if $result ne 'OK EXEC';
X print "ok 7\n";
}
else {
X $pty->Exec('echo OK EXEC');
}
X
wait;
SHAR_EOF
$shar_touch -am 1012095797 'PTY-0.50/test.pl' &&
chmod 0600 'PTY-0.50/test.pl' ||
$echo 'restore of' 'PTY-0.50/test.pl' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/test.pl:' 'MD5 check failed'
25fa10a78e41120df2194657327bba2c PTY-0.50/test.pl
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/test.pl'`"
test 1476 -eq "$shar_count" ||
$echo 'PTY-0.50/test.pl:' 'original size' '1476,' 'current size' "$shar_count!"
fi
fi
# ============= PTY-0.50/Changes ==============
if test -f 'PTY-0.50/Changes' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/Changes' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/Changes' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/Changes' &&
Revision history for Perl extension PTY.
X
0.50 Oct 10, 1997
X - First release
X
0.01 Fri Oct 10 11:24:35 1997
X - original version; created by h2xs 1.18
X
SHAR_EOF
$shar_touch -am 1010151097 'PTY-0.50/Changes' &&
chmod 0600 'PTY-0.50/Changes' ||
$echo 'restore of' 'PTY-0.50/Changes' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/Changes:' 'MD5 check failed'
155713a688b35359d7aac91cd1efba6e PTY-0.50/Changes
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/Changes'`"
test 153 -eq "$shar_count" ||
$echo 'PTY-0.50/Changes:' 'original size' '153,' 'current size' "$shar_count!"
fi
fi
# ============= PTY-0.50/MANIFEST ==============
if test -f 'PTY-0.50/MANIFEST' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/MANIFEST' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/MANIFEST' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/MANIFEST' &&
Changes
MANIFEST
Makefile.PL
PTY.pm
test.pl
README
SHAR_EOF
$shar_touch -am 1010150897 'PTY-0.50/MANIFEST' &&
chmod 0600 'PTY-0.50/MANIFEST' ||
$echo 'restore of' 'PTY-0.50/MANIFEST' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/MANIFEST:' 'MD5 check failed'
38aa5e8a8a7543ce581437344edde240 PTY-0.50/MANIFEST
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/MANIFEST'`"
test 51 -eq "$shar_count" ||
$echo 'PTY-0.50/MANIFEST:' 'original size' '51,' 'current size' "$shar_count!"
fi
fi
# ============= PTY-0.50/README ==============
if test -f 'PTY-0.50/README' && test "$first_param" != -c; then
$echo 'x -' SKIPPING 'PTY-0.50/README' '(file already exists)'
else
$echo 'x -' extracting 'PTY-0.50/README' '(text)'
sed 's/^X//' << 'SHAR_EOF' > 'PTY-0.50/README' &&
DESCRIPTION:
------------
X
This is verion 0.50 of PTY. A perl5 object to work with pseudo terminals.
X
COPYRIGHT:
----------
X
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the Perl README file.
X
IF YOU HAVE PROBLEMS:
---------------------
X
Pelase email and comments and bug reports to <hakimian@aha.com>
X
With a bug report, please include OS version (output of uname -a) and
perl version output of perl -v. Thanks.
X
REQUIREMENTS:
-------------
X
Perl 5 (any version? tested under 5.004_01)
X
PLATFORMS:
----------
X
Tested under HPUX 10.20. Should work most anywhere.
X
INSTALLATION:
-------------
X
Uses the standard installation procedure.
X
1. perl Makefile.PL
2. make
3. make test
4. make install
X
SHAR_EOF
$shar_touch -am 1010150897 'PTY-0.50/README' &&
chmod 0600 'PTY-0.50/README' ||
$echo 'restore of' 'PTY-0.50/README' 'failed'
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|| $echo 'PTY-0.50/README:' 'MD5 check failed'
7d98c47216d8f0b34d2f41bb665d6f74 PTY-0.50/README
SHAR_EOF
else
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'PTY-0.50/README'`"
test 774 -eq "$shar_count" ||
$echo 'PTY-0.50/README:' 'original size' '774,' 'current size' "$shar_count!"
fi
fi
rm -fr _sh21679
exit 0
-- Cut here for PTY-0.50.shar --
------------------------------
Date: Mon, 13 Oct 1997 00:05:09 -0500
From: Stefan Adams <pinky@mail.usmo.com>
Subject: Quick Question About tr///
Message-Id: <3441AC05.159DB631@mail.usmo.com>
I used this command
$amount =~ tr/\///;
to eliminate all "/"
But it remained
as in:
$amount="/hello";
$amount=~tr/\///;
And I got "/hello" back
But, if I did:
$amount="/hello";
$amount=~tr/\//s/;
I got back "shello"
What am I missing?
Thanks for the assistance!
Stefan Adams
Net Admin
Borgia High
pinky@mail.usmo.com
In article <61imh3$72f$3@news.idiom.com>, you say...
> Yes. You're using "= ~" instead of "=~" the latter is the binding
operator
> for a patern match, and the former is not.
>
> The other mistake, is you're using a regular expression, when what you
really
> need to do is just kill all the characters that don't make a valid
number.
>
> -> Anyone have an elegant way of doing what I am trying to do?
>
> Sure. How about:
>
> $amount =~ tr/\$//;
>
> This will elminate all instances of the character "$" from the string
in
> $amount. Also, tr/// is usually much faster than a pattern match with
a
> regex.
>
> ->Examples are most apreciated. thanks ALL
>
> De Nada.
>
> -jcr
>
> --
> John C. Randolph (408) 358-6732 NeXT mail preferred.
> Chief Technology Officer, WARPnet Incorporated.
> @"Hey, %s! You're a NAZI, and you can't spell!"
------------------------------
Date: Mon, 13 Oct 1997 19:00:51 -0700
From: "Allen Evenson" <ase@seanet.com>
Subject: Re: Quick Question About tr///
Message-Id: <61ujnp$fvb@q.seanet.com>
Stefan Adams wrote in article <3441AC05.159DB631@mail.usmo.com>...
>I used this command
>$amount =3D~ tr/\///;
>to eliminate all "/"
>But it remained
>as in:
>$amount=3D"/hello";
>$amount=3D~tr/\///;
>And I got "/hello" back
>But, if I did:
>$amount=3D"/hello";
>$amount=3D~tr/\//s/;
>I got back "shello"
>What am I missing?
>Thanks for the assistance!
>
>Stefan Adams
>Net Admin
>Borgia High
>pinky@mail.usmo.com
>
[snip]
try:=20
$amount =3D~ tr[/][]d;
basically I just changed your delimiter so as not to have to quote the
slash and added the 'd' option which "deletes found but unreplaced
characters." (To quote the Camel)
Hope That Helps.
Allen S. Evenson
------------------------------
Date: 14 Oct 1997 02:47:30 GMT
From: Eli the Bearded <usenet-tag@qz.little-neck.ny.us>
Subject: Re: reg exp size limit !?
Message-Id: <eli$9710132237@qz.little-neck.ny.us>
Posted and mailed.
<sartang@pcocd2.intel.com> wrote:
> is there a limit on how big a string can be used
> for matching in a regular expression. I'm having
Yes.
> It fails to match it if it's over 32786 characters.
:r! man perl | grep -C 3276
longer than 255 characters, and no component of your PATH
may be longer than 255 if you use ----SSSS. A regular
expression may not compile to more than 32767 bytes
internally.
Probably should be mentioned in the perlre manpage as well, but,
oh well.
Elijah
------
has never reached that limit himself (perhaps surprizingly)
------------------------------
Date: Mon, 13 Oct 1997 19:23:04 -0500
From: Vinny Carpenter <vscarpenter@qgraph.com>
Subject: Reg expr. question (SEARCH and REPLACE)
Message-Id: <3442BB68.E1A738FC@qgraph.com>
hi guys.. I have a question that I'm hoping someone can answer. Using
Perl on a Linux
box. Here's what I would like this script to do:
Run through a text file. Find all lines that are ALL CAPS and add
something to them.
For example: If it encounters something like this:
Before:
ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU..
After:
<H3>ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ..</H3>
There will be several other lines in that file that have mixed case that
should be ignored.
I've tried the following to no avail
/usr/local/bin/perl -pi.bak -e 's/^.*?~A-Z~.*$/<\/H2>/i' and many other
variations, but I'm
not getting there. Any ideas?? Thanks in advance.
--Vinny
------------------------------
Date: Mon, 13 Oct 1997 20:00:34 -0400
From: TechMaster Pinyan <jefpin@bergen.org>
To: Toutatis <toutatis@_SPAMTRAP_toutatis.net>
Subject: Re: s/ / /g or tr/ / / what is the difference?
Message-Id: <Pine.SGI.3.95.971013195822.3547D-100000@vangogh.bergen.org>
>> Could someone explain the difference between s/// and tr/// and when you
>> use one or the other?
>
>The return value:
>tr/// counts the substituted characters, s/// returns boolean (1 or 0).
>
>print "xxxxxx" =~ s/x/ /g; #prints '1'
>print "xxxxxx" =~ tr/x/ /; #prints '6'
Umm... I think a more detailed explanation is needed:
s/// substitutes one STRING for another STRING.
tr/// or y/// substitues EACH CHARACTER for EACH CHARACTER
examples:
$foo = "hello";
$bar = "goodbye";
$foo =~ s/l/*l*/g; # $foo = "he*l**l*o"
$bar =~ tr/goe/OEG/; # bar = "OEEdbyG"
Hope that clears it up...
----------------
| "A bird in the hand leaves a nasty stain."
| - Me
----------------
Jeff Pinyan | http://users.bergen.org/~jefpin | jefpin@bergen.org
webXS - the new eZine for WebProgrammers! TechMaster@bergen.org
Visit us @ http://users.bergen.org/~jefpin/webXS
** I can be found on #perl on irc.ais.net as jpinyan **
- geek code -
GCS/IT d- s>+: a--- C+>++ UAIS+>$ P+++$>++++ L E--->---- W++$
N++ !o K--? w>+ !O M>- V-- PS PE+ !Y !PGP t+ !5 X+ R tv+ b>+
DI+++ D+>++ G>++ e- h- r y?
------------------------------
Date: 14 Oct 1997 02:50:30 GMT
From: systech@polarnet.com (Ken Irving)
Subject: uninitialized value warning for m// substrings
Message-Id: <61umlm$jtc$1@news2.cais.com>
I was hoping this would go away with 5.004_02, but the following
sample code gives a warning if one of the substring arguments in
the match is missing, because it is then used anyway. The warning
is true, an unitialized value is being used, but I know it will be
null, and the result is useful and convenient. Perhaps this is a
lousy technique which I've used to good effect, but is there a way
to do this sort of thing without getting a warning?
#!/perl/bin/perl -w
if ( "123" =~ /(\d)(\d)(\d)?/g ) { print $1,$2,$3,"\n" };
if ( "12" =~ /(\d)(\d)(\d)?/g ) { print $1,$2,$3,"\n" };
Ken
------------------------------
Date: Mon, 13 Oct 1997 20:49:21 GMT
From: cx455@torfree.net (David Archer)
Subject: unix lynx perl cgi html ???
Message-Id: <EI0CIA.4wE.0.queen@torfree.net>
The usual ways of calling a cgi perl script are not working for me.
how can one tell if their server has ssi, how can you invoke them?
i"ve tried <!#--exec cgi="count.cgi"-->
and <img src="count.cgi"> are their variations that
may be specific too my server?
I can run the scripts from my public_html , and call them
in href but this renders pages of code, or server 500.
a hint. while I can do radio buttons, and simple forms, drop down
menu forms render server 500 error as well.
HELP
--
------------------------------
Date: Mon, 13 Oct 1997 18:07:18 -0500
From: tadmc@flash.net (Tad McClellan)
Subject: Re: unix lynx perl cgi html ???
Message-Id: <6j9u16.su2.ln@localhost>
David Archer (cx455@torfree.net) wrote:
: The usual ways of calling a cgi perl script are not working for me.
: how can one tell if their server has ssi, how can you invoke them?
As that does not involve perl, you didnt' really expect to get an
answer in a perl newsgroup. Did you?
We know perl here. They know WWW stuff in the WWW newsgroups.
This is not a WWW newsgroup.
These are the WWW newsgroups:
comp.infosystems.www.advocacy
comp.infosystems.www.announce
comp.infosystems.www.authoring.cgi
comp.infosystems.www.authoring.html
comp.infosystems.www.authoring.images
comp.infosystems.www.authoring.misc
comp.infosystems.www.browsers.mac
comp.infosystems.www.browsers.misc
comp.infosystems.www.browsers.ms-windows
comp.infosystems.www.browsers.x
comp.infosystems.www.misc
comp.infosystems.www.servers.mac
comp.infosystems.www.servers.misc
comp.infosystems.www.servers.ms-windows
comp.infosystems.www.servers.unix
comp.infosystems.www.providers
comp.infosystems.www
comp.infosystems.www.users
: i"ve tried <!#--exec cgi="count.cgi"-->
: and <img src="count.cgi"> are their variations that
That doesn't look like perl either.
Looks like HTML or something. There is a newsgroup for HTML questions above.
If your CGI script was written in C, or Visual Basic, or shell, the
answer would be the same. Therefore, it is not a perl question.
: may be specific too my server?
Try asking in a server newsgroup. There are newsgroups for server
questions above too.
Perl does not have a server.
: I can run the scripts from my public_html , and call them
: in href but this renders pages of code, or server 500.
Your server is misconfigured, or you are not conforming to any of
the many ways it might be configured.
Ask in a server newsgroup (or, better, ask whoever it was that configured
the server that you are using). There are newsgroups for server
questions above again.
Perl does not have a server.
: a hint. while I can do radio buttons, and simple forms, drop down
: menu forms render server 500 error as well.
: HELP
Ask it the right place, and you may get some help...
--
Tad McClellan SGML Consulting
tadmc@flash.net Perl programming
Fort Worth, Texas
------------------------------
Date: 8 Mar 97 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 8 Mar 97)
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.misc (and this Digest), send your
article to perl-users@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.
The Meta-FAQ, an article containing information about the FAQ, is
available by requesting "send perl-users meta-faq". The real FAQ, as it
appeared last in the newsgroup, can be retrieved with the request "send
perl-users FAQ". Due to their sizes, neither the Meta-FAQ nor the FAQ
are included in the digest.
The "mini-FAQ", which is an updated version of the Meta-FAQ, is
available by requesting "send perl-users mini-faq". It appears twice
weekly in the group, but is not distributed in the digest.
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 V8 Issue 1171
**************************************