[11977] in Perl-Users-Digest
Perl-Users Digest, Issue: 5577 Volume: 8
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu May 6 02:07:14 1999
Date: Wed, 5 May 99 23:00:21 -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 Wed, 5 May 1999 Volume: 8 Number: 5577
Today's topics:
**Free CGI Scripts!** (IlIIIIIIII)
Re: ==> REGEX, how do I use a variable as a seach patte (Tad McClellan)
Re: Convert flat data into tree (Ronald J Kimball)
Re: Dumb Question <JFedor@datacom-css.com>
Re: Dumb Question <uri@sysarch.com>
Re: Generate matching strings from regex ? (Ronald J Kimball)
Re: grep to scalar instead of variable?, subroutine exi (Ronald J Kimball)
Help using message boards <webmaster@roleplayinggames.net>
Help using message boards <webmaster@roleplayinggames.net>
Re: Help using message boards <brent.s@ihug.co.nz>
HELP: Newbie in Need of Script (Nelson Kulz)
Re: HELP: Newbie in Need of Script <design@raincloud-studios.com>
Re: Is evaluation of printf operands left-to-right? (Ronald J Kimball)
Re: Looking for Perl Program <design@raincloud-studios.com>
Re: matching hyphenated words across line ends <uri@sysarch.com>
Re: matching hyphenated words across line ends <armbrust@gte.net>
Re: matching hyphenated words across line ends <ebohlman@netcom.com>
Re: Ms Access database <tashbrk@ix.netcom.com>
Re: Newbie question <uri@sysarch.com>
Re: OReilly bullshit.... Camel logo trademark (Bbirthisel)
Re: OReilly bullshit.... Camel logo trademark (Ran)
Re: OReilly bullshit.... Camel logo trademark (Ronald J Kimball)
Re: pattern matching (Ronald J Kimball)
Re: regexp for matching IP address block <uri@sysarch.com>
Re: regexp for matching IP address block (Benjamin Franz)
Re: regexp for matching IP address block <uri@sysarch.com>
Re: Square brackets in variable for regex <frederic@xilinx.com>
Re: Square brackets in variable for regex <ebohlman@netcom.com>
Re: What is the opposite of bind() ? (Kenny McCormack)
Re: What is the opposite of bind() ? (Ronald J Kimball)
Special: Digest Administrivia (Last modified: 12 Dec 98 (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: 6 May 1999 04:00:46 GMT
From: iliiiiiiii@aol.com (IlIIIIIIII)
Subject: **Free CGI Scripts!**
Message-Id: <19990506000046.21682.00003206@ng-fp1.aol.com>
get free CGI scripts at:
http://tofs.cjb.net
------------------------------
Date: Wed, 5 May 1999 19:54:53 -0400
From: tadmc@metronet.com (Tad McClellan)
Subject: Re: ==> REGEX, how do I use a variable as a seach pattern
Message-Id: <dolqg7.ac6.ln@magna.metronet.com>
Kevin Howe (khowe@performance-net.com) wrote:
: How do you use a variable as the search pattern in s// ?
: Example
: ----------------------------------------------------------
: $string = "<-this-> blah blah blah <+that+>";
: $search= "<-(*.?)->|<+(*.?)+>";
^^
^^ huh? This doesn't even compile...
You should escape regex metacharacters if you want
a literal match.
: $string =~ s/$search/hello/gi;
: ----------------------------------------------------------
: $string would equal "<-hello-> blah blah blah <+hello+>";
No it wouldn't.
You match the angle brackets but never put them back in.
$search= '(<([-+])).*?(\2>)';
$string =~ s/$search/$1hello$3/gi;
--
Tad McClellan SGML Consulting
tadmc@metronet.com Perl programming
Fort Worth, Texas
------------------------------
Date: Thu, 6 May 1999 01:35:13 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: Convert flat data into tree
Message-Id: <1drctbh.1d7c0wn15bubwgN@p67.block2.tc3.state.ma.tiac.com>
<deja_ken@my-dejanews.com> wrote:
> Assuming a data structure like:
>
> ID Parent Data
> 1 0 "foo"
> 2 0 "bar"
> 3 1 "whee"
> 4 3 "ahh"
> 5 1 "pop"
> 6 2 "fuzz"
>
> I'd get back:
>
> foo
> whee
> ahh
> pop
> bar
> fuzz
Here is one way to do it. The main structure is a tree, represented by
a hash of hashes. The secondary structure maps ids to nodes in the
tree, represented as an array of hash refs.
Note that there is almost no error checking in this code. In
particular, pieces of the tree will be wiped out if an ID is repeated
for another name.
I went ahead and had the nodes processed in sorted order.
#!/usr/local/bin/perl
use strict;
my @ids;
$ids[0] = {};
my $tree = $ids[0];
while (<>) {
my($id, $parent, $name) = split;
next unless $id =~ /^\d+$/;
$name =~ s/^"//; $name =~ s/"$//;
$ids[$id] = {};
$ids[$parent]->{$name} = $ids[$id];
}
print_tree($tree, 0);
sub print_tree {
my($root, $indent) = @_;
foreach my $node (sort keys %$root) {
print ' ' x $indent, $node, "\n";
print_tree($root->{$node}, $indent + 1);
}
}
__END__
Enjoy!
--
#!/usr/bin/sh -- chipmunk (aka Ronald J Kimball)
perl -e'for(sort keys%main::){print if $$_ eq 1}
' -s -- -' Just' -' another ' -'Perl ' -'hacker
' http://www.tiac.net/users/chipmunk/ [rjk@linguist.dartmouth.edu]
------------------------------
Date: Thu, 6 May 1999 00:38:07 -0400
From: "Jody Fedor" <JFedor@datacom-css.com>
Subject: Re: Dumb Question
Message-Id: <7gr4q4$k5q$1@plonk.apk.net>
Jonathan Stowe wrote in message <7gq7qf$3ja$1@gellyfish.btinternet.com>...
>use CGI qw(:standard);
>
>my @words = split / /,param('s');
>
>;-}
Everyone suggests using modules but I think the overhead for CGI would be
alot where just a few lines of matching code would do the trick. Is my
thinking wrong here?
Also, It's not really good to use a calculator (K-3) if you don't understand
the basics. Using the simple s/// I'm learning the basics so when I see all
this fancy code you guys are dishing out, I might be able to understand how
they work. I'm working on becoming a mechanic not just the driver of the
car!
I appreciate everyones help on this and am learning alot from all the
bantering. About * being greedy, I read that in the book! Now I know what
it means! LOL.
Jody
------------------------------
Date: 06 May 1999 00:23:23 -0400
From: Uri Guttman <uri@sysarch.com>
Subject: Re: Dumb Question
Message-Id: <x7emkuygg4.fsf@home.sysarch.com>
>>>>> "JF" == Jody Fedor <JFedor@datacom-css.com> writes:
JF> Everyone suggests using modules but I think the overhead for CGI
JF> would be alot where just a few lines of matching code would do the
JF> trick. Is my thinking wrong here?
which is more important to you, correctness or possible speedups? i
think knuth said something like: premature optimization is evil. get it
working first, leanr how it works and then if you know you are doing
roll your own.
i which i could tattoo that on the eyelids of all perl newbies. they
can't even program their way out of a paper bag and they presume to
write code that does serious data munging like cgi parsing. and they
call us egoists! the smart ones use other people's work!
the only exception for that is where i see so many public cgi scripts
that obviously cut and pasted the crappy parser from matt's
scripts. this is obvious in that even the stupid comments are copied. i
won't touch any of them for that reason, it sickens my stomach to see
such hubris.
flame off!
uri
--
Uri Guttman ----------------- SYStems ARCHitecture and Software Engineering
uri@sysarch.com --------------------------- Perl, Internet, UNIX Consulting
Have Perl, Will Travel ----------------------------- http://www.sysarch.com
The Best Search Engine on the Net ------------- http://www.northernlight.com
------------------------------
Date: Thu, 6 May 1999 01:35:20 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: Generate matching strings from regex ?
Message-Id: <1drcw7f.po7pqv175urimN@p67.block2.tc3.state.ma.tiac.com>
vepxistqaosani <fbart@sprynet.com> wrote:
> As a new user, I find that regexen are occasionally (well, always)
> difficult to read. It would be helpful to have a script that could take
> a regex as input and produce a matching string.
>
> So, if the input is
> /(.*)\d\s\w(.*)/
> some possible outputs are
> "any0 Xany"
> "any7\tbany"
> etc.
>
> Now, this would probably be an excellent exercise for me, but why
> reinvent the wheel? Anybody know of something like this, or shall I roll
> my own?
Here's one I wrote over a year ago. (With only one change -- proper handling of
[^]] -- since I posted it back then...) Give it a regex, and it attempts to
produce one string which the regex matches. It will then try the match and tell
you whether or not it worked, and list the substrings matched by back
references, if any.
It does not handle the following:
zero-width assertions
(?...) extensions
embedded whitespace and comments with /x
#!/usr/local/bin/perl -w
# matcher.pl
# Ronald J Kimball
# Feb 9, 1998
use strict;
my($regex) = shift || die "Usage: $0 regex\n";
my(%bslash) = ( # mapping of backslashed characters
a => "\a", # to matching characters
n => "\n",
r => "\r",
t => "\t",
f => "\f",
e => "\e",
d => '0',
D => '#',
w => 'A',
W => '&',
's'=> ' ',
S => '_',
);
my($allchars) = pack("C*", 0x00 .. 0xFF);
# array of all characters
my(@backrefs) = (undef); # array to store back references
my($match) = &match($regex); # find match for regex
print
qq{"\Q$match\E" =~ /$regex/ returns },
($match =~ /$regex/ ? 'True' : 'False'),
"\n";
print join("\n", "Backrefs: ", @backrefs[1..$#backrefs], "");
# find a string which matches regex
sub match {
my($regex) = shift;
$regex =~ s/([^\\][?*+\}])\?/$1/g; # remove non-greedy quantifiers
$regex =~ s/([^\\])([*+?])/$1\{1\}/g; # quantifiers -> {1}
$regex =~ s/([^\\]\{)0([,\}])/$ {1}1$2/g; # always match at least once
$regex =~ s/([^\\])\{(\d+)(?:,\d*)?\}/$1\{$2\}/g;
# always match minimum
return &match_recurse($regex); # recursively find match
}
# find a string which matches regex
# recurses on parenthesized sub-regexes
sub match_recurse {
my($regex) = shift; # regex to find match for
my($match) = ''; # match being found
my($c); # current character in regex
while (length $regex) {
my($submatch) = ''; # match for current char/sub-regex
$c = substr($regex, 0, 1); # get next char from regex
substr($regex, 0, 1) = '';
if ($c eq '\\') { # backslash
if ($regex =~ s/^([1-9])(?!\d)//) {
# handle back references
$submatch = $backrefs[$1];
} elsif ($regex =~ s/^([0-3][0-7]{1,2}|x[0-9a-fA-F]{1,2}|c.|0)//) {
# handle octal, hex, control, null
eval qq{\$submatch = "\\$1"};
} else { # handle everything else
$c = substr($regex, 0, 1); # get next char
substr($regex, 0, 1) = '';
if (exists $bslash{$c}) {
$submatch = $bslash{$c}; # special meaning for \char
} else {
$submatch = $c; # no special meaning
}
}
} elsif ($c eq '|') { # alternation: match first choice
return $match;
} elsif ($c eq '(') { # parenthesized sub-regex
my($temp) = '';
my($level) = 1;
push(@backrefs, ''); # allocate back reference
my($br_ref) = \$backrefs[$#backrefs];
# save ref to back reference
while ($level > 0 and length $regex) {
$c = substr($regex, 0, 1);
substr($regex, 0, 1) = '';
if (length($temp) and substr($temp, -1) ne '\\') {
if ($c eq ')') {
$level--;
} elsif ($c eq '(') {
$level++
}
}
$temp .= $c;
} # find matching close paren
$temp =~ s/\)$// or # remove close paren
die "Mismatched parentheses in regex.\n";
$submatch = &match_recurse($temp);
# find match for sub-regex
$$br_ref = $submatch; # store as back reference
} elsif ($c eq '[') { # character class
$regex =~ s/^(\^?\]?(?:\\.|[^\]])*)\]//;
my($class) = $1;
($submatch) = $allchars =~ /([$class])/;
} elsif ($c eq '.') { # match any character
$submatch = '.';
} else { # non-special character
$submatch = $c;
}
if ($regex =~ /^\{/) { # check for quantifier
$regex =~ s/^\{(\d+)\}//;
$submatch = $submatch x $1;
}
$match .= $submatch; # append to match being built
}
return $match;
} # sub match_recurse
Enjoy! (FWIW. :)
--
_ / ' _ / - aka -
( /)//)//)(//)/( Ronald J Kimball rjk@linguist.dartmouth.edu
/ http://www.tiac.net/users/chipmunk/
perl -e '$_="\012534`!./4(%2`\cp%2,`(!#+%2j";s/./"\"\\c$&\""/gees;print'
------------------------------
Date: Thu, 6 May 1999 01:35:23 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: grep to scalar instead of variable?, subroutine exists?
Message-Id: <1drcwzv.mlce9weo32ppN@p67.block2.tc3.state.ma.tiac.com>
Charles R. Thompson <design@raincloud-studios.com> wrote:
> In learning Perl (page 89) It says the selected target for alt targets must be
> something you can assign a scalar value to, such as a scalar variable or an
> element of an array... an array is what grep returns to, hence the need for
> the [0] index... or am I wrong here?
grep does not return an array. grep returns a list. That's why you
can't perform a substitution on an element sliced from grep's result.
You have to assign the list to an array first.
--
#!/usr/bin/sh -- chipmunk (aka Ronald J Kimball)
perl -s -e'print sort grep { /\s/ } keys %main::
' -- -is -' Just' -' another ' -'Perl ' -'hacker
' http://www.tiac.net/users/chipmunk/ [rjk@linguist.dartmouth.edu]
------------------------------
Date: Thu, 6 May 1999 01:22:02 -0400
From: "Donboy" <webmaster@roleplayinggames.net>
Subject: Help using message boards
Message-Id: <TK9Y2.836$x24.5753886@news-read1.qis.net>
Hello all. I'm currently running a website that contains a few message
boards (controlled by CGI scripts) and I'd like to begin placing
restrictions on who is capable of posting messages.
I've been told that the best way to handle this would be to use an .htaccess
file that will require a valid username and password before the messages can
be viewed or posted, but I'd rather not go that route for various reasons.
Here's my current plan. Please let me know if you have any suggestions on
how I could improve it:
Before a user will be allowed to post messages, they must register with me
first and I'll assign them a password to use when posting messages. When
they want to post a message they must enter this password into a text field
on the form (along with their name, email address, subject and message
body). When I've received their choice for a password, I'll take the
password and insert it into a text file which will reside somewhere
seperately on the site. When the user enters their password and posts a
message, the script will open the text file and look to see if the password
is valid. If the password entered is not found in the text file, the user
will not be allowed to post messages. Sounds pretty simple, eh? Not for
me! I'm having a tough time making it work....
My text file looks something like this:
goober
danny
nightshade
quisp
(and other assorted passwords)
My message board script looks something like this:
sub get_access {
$access=0;
open(FILE,"$basedir/$access_file") || die $!;
while($line=<FILE>) { if ($line =~ $FORM{'userid'}) { $access=1; } }
close(FILE);
if ($access == 0) { &error(no_access); }
}
Where:
$access_file = the text file like what I described above. Essentially a
list of passwords.
$FORM{'userid'} = whatever was entered into the form as the user's password
&error(no_access) = a notice saying that the password was incorrect
All this seemed to be pretty simple and elegant, but it's not working for
me. When I tested this system, I tried entering several different passwords
and everything seemed to work pretty well, but I found a few flaws. I could
enter "N" (as in Nightshade) and the message would be posted! Apparently
the subroutine above was looking for ANY of the characters entered in the
"userid" field. This isn't going to work. Can somebody suggest changes
that I could make to improve this system?
------------------------------
Date: Thu, 6 May 1999 01:31:55 -0400
From: "Donboy" <webmaster@roleplayinggames.net>
Subject: Help using message boards
Message-Id: <8U9Y2.837$x24.5758207@news-read1.qis.net>
Hello all. I'm currently running a website that contains a few message
boards (controlled by CGI scripts) and I'd like to begin placing
restrictions on who is capable of posting messages.
I've been told that the best way to handle this would be to use an .htaccess
file that will require a valid username and password before the messages can
be viewed or posted, but I'd rather not go that route for various reasons.
Here's my current plan. Please let me know if you have any suggestions on
how I could improve it:
Before a user will be allowed to post messages, they must first register
with me and I'll assign them a password to use when posting messages. When
they want to post a message they must enter this password into a text field
on the form (along with their name, email address, subject and message
body). When I've received their choice for a password, I'll take the
password and insert it into a text file which will reside somewhere
seperately on the site. When the user enters their password and posts a
message, the script will open the text file and look to see if the password
is valid. If the password entered is not found in the text file, the user
will not be allowed to post messages. Sounds pretty simple, eh? Not for
me! I'm having a tough time making it work....
My text file looks something like this:
goober
danny
nightshade
quisp
(and other assorted passwords)
My message board script looks something like this:
sub get_access {
$access=0;
open(FILE,"$basedir/$access_file") || die $!;
while($line=<FILE>) { if ($line =~ $FORM{'userid'}) { $access=1; } }
close(FILE);
if ($access == 0) { &error(no_access); }
}
Where:
$access_file = the text file like what I described above. Essentially a
list of passwords.
$FORM{'userid'} = whatever was entered into the form as the user's password
&error(no_access) = a notice saying that the password was incorrect
All this seemed to be pretty simple and elegant, but it's not working for
me. When I tested this system, I tried entering several different passwords
and everything seemed to work pretty well, but I found a few flaws. I could
enter "N" (as in Nightshade) and the message would be posted! Apparently
the subroutine above was looking for ANY of the characters entered in the
"userid" field. This isn't going to work. Can somebody suggest changes
that I could make to improve this system?
------------------------------
Date: Thu, 6 May 1999 17:44:03 +1200
From: Brent Singers <brent.s@ihug.co.nz>
To: Donboy <webmaster@roleplayinggames.net>
Subject: Re: Help using message boards
Message-Id: <Pine.LNX.3.96.990506173026.26656A-100000@brent.ihug.co.nz>
I'm nowhere near as good at this as some people here - but I wanna have a
crack at this anyway...
> while($line=<FILE>) { if ($line =~ $FORM{'userid'}) { $access=1; } }
There's a problem. As far as I can tell - you are effectively saying "if
the line contains what was entered..." instead of what you want to say
which is "If the line equals...". Try:
if ($line eq $FORM{'userid'}
> Can somebody suggest changes that I could make to improve this system?
Yeah - wouldn't it be better to check a username as well as the password?
The way you have it now depends on somebody knowing _one of_ the passwords
in the file, not neccesarily their own. Not very secure. Try rewriting
it so that it checks if a name and a password entered match a name and
password in the text file. Something like:
Text File:
me,123
you,456
...in the subroutine...
open(FILE,"file_name") or die "Can't do it! $!;
while ($line = <FILE>) {
chop $line;
($name, $pass) = split(/,/,$line);
if (($name eq $FORM{'userid'}) && ($pass eq $FORM{'password'}) {
print "You got it! You now have access";
} else {
print "Errrr .... something wrong ...";
}
}
Brent
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /"\
Living on Earth is expensive, but it does \ / ASCII RIBBON CAMPAIGN
include a free trip around the sun. X AGAINST HTML EMAIL
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- / \
------------------------------
Date: Wed, 5 May 1999 21:25:00 -0700 (PDT)
From: RedXI@webtv.net (Nelson Kulz)
Subject: HELP: Newbie in Need of Script
Message-Id: <18401-3731199C-82@newsd-112.bryant.webtv.net>
Hello. I know how to program, but I don't program very well in Perl.
Does anyone have a script written in Perl5 that allows access to telnet
(Not to the server it's hosted on, but to a remote host and port,
specifiable by me)? Now, unfortunately, I do not have access to the Net
module, so it has to only use the CGI/ CPAN/ POSIX/ Diagnostics modules.
If ANYONE has a script which can do this, output HTML, and NOT use Java
or DHTML, I will be very grateful. Please. Thank you ahead for any help,
and thank you for reading.
------------------------------
Date: Thu, 06 May 1999 05:05:20 GMT
From: "Charles R. Thompson" <design@raincloud-studios.com>
Subject: Re: HELP: Newbie in Need of Script
Message-Id: <kq9Y2.1914$iu1.1747@news.rdc1.tn.home.com>
>Now, unfortunately, I do not have access to the Net
>module, so it has to only use the CGI/ CPAN/ POSIX/ Diagnostics modules.
Why not? They are not installed on my hosting service machines, or local LAN,
but I can install (and have) them in a subdirectory under my CGI-BIN and used
just like a .pl file, so I don't see why they couldn't be used in a similar
manner on your machine. Or is the situation just that impossible? Sorry for
asking, but this made me really curious.
CT
------------------------------
Date: Thu, 6 May 1999 01:35:25 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: Is evaluation of printf operands left-to-right?
Message-Id: <1drcxbi.nvppnk11mh5paN@p67.block2.tc3.state.ma.tiac.com>
William Blasius #42722 <Wm.Blasius@ks.sel.alcatel.de> wrote:
> my @rray = ( 'one', 'two', 'three' );
> printf "stacksize %d, the first was: %s\n", $#rray, pop @rray;
>
> now consider the result:
> stacksize 1, the first was: three
> stacksize 0, the first was: two
> stacksize -1, the first was: one
> stacksize -1, the first was:
my @rray = ( 'one', 'two', 'three' );
printf "the first was %s, stacksize %d\n", pop @rray, $#rray;
the first was three, stacksize 1
the first was two, stacksize 0
the first was one, stacksize -1
> the scalar is apparently evaluated after the pop. Is this the
> expected behaviour? It certainly surprised me. The workaround
> is obvious, but my curiosity is aroused.
As you can see, changing the order of the arguments does not affect the
results. I would guess that $#rray uses delayed evaluation; it pushes a
pointer to @rray onto the stack, and the number of elements is fetched
from the pointer only when it is needed. By then, the pop @rray has
already taken place, changing the contents of what the pointer points
to. That's all speculation, though! :)
--
_ / ' _ / - aka -
( /)//)//)(//)/( Ronald J Kimball rjk@linguist.dartmouth.edu
/ http://www.tiac.net/users/chipmunk/
"It's funny 'cause it's true ... and vice versa."
------------------------------
Date: Thu, 06 May 1999 03:53:05 GMT
From: "Charles R. Thompson" <design@raincloud-studios.com>
Subject: Re: Looking for Perl Program
Message-Id: <Bm8Y2.1910$iu1.1652@news.rdc1.tn.home.com>
>I am looking for a Perl program or CGI program that will count the
>hits on my web page.
>I do not want to use any Server Side Includes.
>Just something that I can call from my HTML document to increment the
>hits and display some GIF images.......
This IS exactly what you want but don't want. SSI is how those things WORK.
comp.infosystems.www.authoring.cgi
Wrong space wrong time wrong ideas,
CT
P.S. While not quite as useless as page counters, well designed log stat
software is much better suited for tracking 'usage'. Note I didn't say
visitors.
------------------------------
Date: 05 May 1999 23:08:41 -0400
From: Uri Guttman <uri@sysarch.com>
Subject: Re: matching hyphenated words across line ends
Message-Id: <x7r9ouyjwm.fsf@home.sysarch.com>
>>>>> "JP" == Jed Parsons <jed@socrates.berkeley.edu> writes:
JP> In article <NG4Y2.41$zh2.2388@dfw-service1.ext.raytheon.com>,
JP> Tim Armbruster <t-armbruster@ti.com> wrote:
>> undef $/;
>> $glob = <>;
>> $glob =~ s/(\w)\-\n(\w+\S?)\s*/"$1$2\n"/eg;
>> print $glob;
JP> s/(\w)-\n(\w)/\1\2\n/g;
JP> Maybe I'm missing something by not including subsequent punctuation
JP> (which is your \S? ?) and whitespace. I also didn't do the groovy
JP> eval---does this serve any special purpose?
his eval was useless. just $1$2\n would do fine. in your code you used
\1\2 which is not cool in the replacement. technically it will work but
not if you have or want octal values in the string too. use $1 and
$2. the \1 form is meant for the regex itself and refers back to a
previous matched grouping.
JP> $/ = "";
JP> while (<IN>) { # clean up hyphens in paragraph mode
JP> s/(\w)-\n(\w)/\1\2\n/g;
JP> print TEMP;
JP> }
JP> $/ = "\n";
JP> while (<TEMP>) { # operate on hyphen-free lines
JP> chomp;
JP> # print the line number and line that matches $pat
JP> printf ("%4s: %s\n", $., $_) if /$pat/;
JP> }
why not just keep the lines in memory and split on \n and then
loop. saves a lot of i/o. this only loses if the file is really big
which i doubt if you are munging hyphenated words.
also i am sure you could do it in one loop but i am not in the mood to
code it. try keeping an active line and if it ends in a word- then get
the next line and if it starts with a word, you can delete the hyphen
and put the second word part after the saved line and process. the rest
of the new line then becomes the saved line.
uri
--
Uri Guttman ----------------- SYStems ARCHitecture and Software Engineering
uri@sysarch.com --------------------------- Perl, Internet, UNIX Consulting
Have Perl, Will Travel ----------------------------- http://www.sysarch.com
The Best Search Engine on the Net ------------- http://www.northernlight.com
------------------------------
Date: Thu, 06 May 1999 03:41:25 GMT
From: "Tim Armbruster" <armbrust@gte.net>
Subject: Re: matching hyphenated words across line ends
Message-Id: <Fb8Y2.607$pq1.27819@dfiatx1-snr1.gtei.net>
Jed Parsons wrote in message <7gqtgl$sq7$1@agate.berkeley.edu>...
>In article <NG4Y2.41$zh2.2388@dfw-service1.ext.raytheon.com>,
>That's essentially what I came up with. My regex was (is)
> s/(\w)-\n(\w)/\1\2\n/g;
>Maybe I'm missing something by not including subsequent punctuation
>(which is your \S? ?) and whitespace. I also didn't do the groovy
>eval---does this serve any special purpose?
No - the eval was unnecessary. The \S was to take care of cases where there
was punctuation after a hyphenated word.
>
>I'd still like to do this without undefining $/, though, since I want to
>be able to operate on individual lines (as I think of them). For
>example, I'd like $. to report line numbers, not paragraph numbers. I
>know that one possible way to accomplish this is with two separate
>loops, though this seems inefficient. Is there a better way?
>
I think this should work:
while(<>){
s/(\w*)\-\n$/\n$1/;
print;
}
------------------------------
Date: Thu, 6 May 1999 03:34:56 GMT
From: Eric Bohlman <ebohlman@netcom.com>
Subject: Re: matching hyphenated words across line ends
Message-Id: <ebohlmanFBAKM9.7qG@netcom.com>
Larry Rosler <lr@hpl.hp.com> wrote:
: That algorithm will glue together the halves of actual hyphenated words
: that just happen to split between lines after the hyphen. I can't think
: of a reasonable way to distinguish that case from the inserted hyphens,
: so perhaps there is no unambiguous solution.
If you've got a nice big dictionary, you could try removing the hyphen,
looking the result up, and putting the hyphen back if there's no match.
That's a heuristic, not an algorithm, but it would help. For that
matter, try removing the newline and looking up the hyphenated word as well.
------------------------------
Date: Wed, 5 May 1999 20:38:59 -0400
From: "Tom Ashbrook" <tashbrk@ix.netcom.com>
Subject: Re: Ms Access database
Message-Id: <7gr378$sib@dfw-ixnews6.ix.netcom.com>
You may try http://www.wotsit.org/. Many cool file formats there for the
reading!
HTH,
Tom.
Marco Vlemmings wrote in message <37305437.E2E7C6E5@ctrl-v.nl>...
>hi all,
>
>I have a question about Ms Access. I want to write a perl script which
>makes a '.mdb' file. Why would i make a '.mdb' file, because i don't
>have a Window NT webserver but a Unix webserver. I want to know the
>content of a 'mdb' file.Can someone help me?
>
>Width kind regards,
>
>Marco Vlemmings
>email at work: marcov@ctrl-v.nl
>email at home: m.vlemmings@goldmine.nl
>
------------------------------
Date: 05 May 1999 23:11:46 -0400
From: Uri Guttman <uri@sysarch.com>
Subject: Re: Newbie question
Message-Id: <x7ogjyyjrh.fsf@home.sysarch.com>
>>>>> "TM" == Tad McClellan <tadmc@metronet.com> writes:
TM> Don't take the advice of professional programmers with years
TM> of Perl experience.
TM> Instead, take the advice of someone who has just learned
TM> some Perl.
TM> That's the ticket.
another vote for comp.lang.perl.newbie!
let them help each other and leave us be.
:-)
uri
--
Uri Guttman ----------------- SYStems ARCHitecture and Software Engineering
uri@sysarch.com --------------------------- Perl, Internet, UNIX Consulting
Have Perl, Will Travel ----------------------------- http://www.sysarch.com
The Best Search Engine on the Net ------------- http://www.northernlight.com
------------------------------
Date: 6 May 1999 03:11:46 GMT
From: bbirthisel@aol.com (Bbirthisel)
Subject: Re: OReilly bullshit.... Camel logo trademark
Message-Id: <19990505231146.29803.00000597@ng57.aol.com>
Hi Matt:
> They have to, or lose their rights
>>to keep their distinctive trademark. ORA put the camel on the book.
>>That association is theirs alone.
>>--tom
>
>Whether they like it or not, the camel is now a generally-accepted
>symbol for Perl. It's spread around many thousands of sites on the web.
And a funny green bottle is a generally accepted symbol for a soft
drink. And there is this strange hybrid between a porthole and a flag.
>The camel on my site looks NOTHING like their camel, either. And I would
>be more than happy to put a note on the site saying that I'm not
>associated with ORA in any way. I'm sure everyone knows that already
>anyway.
For well over a year, O'Reilly has offered (and occasionally promoted)
a specific camel logo for use on web pages under certain conditions.
cf. http://republic.perl.com/logo.html
You can use that one if you wish to abide by their conditions. They
have not, to my knowledge, made any effort or promise to release
their trademark to the public or reduce their use of it. I see no reason
why they should. One of the conditions for using their logo was a
link back to an O'Reilly-sponsored site. Hence, their understanding
of camel logos included advertising and promotion on the web for
their product offerings - which include both books and other items.
Their behavior has been pretty consistent. The line between print
and electronic publication is sufficiently blurred to make trying to
limit a Trademark to only one area a fool's errand.
-bill
Making computers work in Manufacturing for over 25 years (inquiries welcome)
------------------------------
Date: Thu, 06 May 1999 04:34:16 GMT
From: ran@netgate.net (Ran)
Subject: Re: OReilly bullshit.... Camel logo trademark
Message-Id: <925965256.470.41@news.remarQ.com>
In <7gq1kl$87s$1@info2.uah.edu>, gbacon@itsc.uah.edu (Greg Bacon) writes:
>Apparently, ORA is
>asserting trademark on Camel images in association with Perl
>publications (using a very generous definition of `publication')
... which just happens to be the one mandated by the U.S. Congress.
>and
>waiting for someone with sufficient supplies of cojones and denero to
>challenge them on it.
I would imagine that the attitude at O'Reilly is that, if the U.S.
Government is overthrown, the potential loss of their animal trademarks
is likely to be among the least of their worries.
>Legal-might-makes-right is a disgusting attitude.
So is the one that says it's okay to accuse someone of having evil
intentions without a scintilla of supporting evidence.
Ran
------------------------------
Date: Thu, 6 May 1999 01:35:30 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: OReilly bullshit.... Camel logo trademark
Message-Id: <1drcyoc.1qimu8v1hxr6sjN@p67.block2.tc3.state.ma.tiac.com>
Matt Kruse <mkruse@rens.com> wrote:
> >That's not what's going on. If you had a Camel logo advertising
> >your home-grown cigarettes, don't you think that the tobacco
> >lords would hunt you down? They have to, or lose their rights
> >to keep their distinctive trademark. ORA put the camel on the book.
> >That association is theirs alone.
> >--tom
>
> Whether they like it or not, the camel is now a generally-accepted
> symbol for Perl. It's spread around many thousands of sites on the web.
Obviously, they are taking steps to correct such occurences of trademark
violation.
> The camel on my site looks NOTHING like their camel, either. And I would
> be more than happy to put a note on the site saying that I'm not
> associated with ORA in any way. I'm sure everyone knows that already
> anyway.
Really, it looks to me like you copied the camel picture directly from
O'Reilly, and then turned it into a simple line representation. Your
camel even has its legs crossed in exactly the same way!
>From your website:
These are icons I created to use in Windows 95. I associate them
with .pl and .pm extensions, and it helps me tell at a glance that a
file is a Perl file, and whether or not it's a module or script.
Colors are taken from the Camel books, of course, and seemed pretty
appropriate :)
Of course, O'Reilly can't trademark the colors, but it seems to me that
you have actually admitted to copy your representation of the camel
directly from O'Reilly.
> If I wrote a perl book and put a camel on it, I would understand. That
> would be different, because the confusion would be clear.
>
> Here, there is no confusion.
O'Reilly does not just use the camel on the cover of its Programming
Perl book. It uses the camel on its web site, in its catalogues and
brochures, on its T-shirts and canvas bags... Get the picture?
Do you think McDonald's would be okay with you using the golden arches
on your styrofoam containers, as long as you didn't erect them outside
your restaurant?
> I realize companies need to make efforts to stop unauthorized trademark
> useage, but IMO, they are taking it too far in finding any and every perl
> site that may have some representation of a camel.
YANAL.
> What O'Reilly should do is allow the camel to become a public symbol for
> Perl, but maintain the trademark for books about Perl. Seems logical to
> me.
That would indeed be a very nice thing for them to do. You certainly
don't have the legal grounds to force that position upon them, however.
> If they force me to remove my Camel windows icons, it's only a loss for
> other people. Thousands of people have downloaded them and found them
> useful. And I think it's pretty safe to say that none of them confused
> them with being officialy O'Reilly-sponsored...
Is that your 'legal' opinion? *snicker*
--
_ / ' _ / - aka -
( /)//)//)(//)/( Ronald J Kimball rjk@linguist.dartmouth.edu
/ http://www.tiac.net/users/chipmunk/
perl -le 'print "Not a lawyer; just another Perl hacker"'
------------------------------
Date: Thu, 6 May 1999 01:35:36 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: pattern matching
Message-Id: <1drcz85.1np6uye5t6uz0N@p67.block2.tc3.state.ma.tiac.com>
Riemann Medici <revjack@radix.net> wrote:
> TRG Software : Tim Greer explains it all:
>
> [snip o' doom]
>
> You talk too much.
>
> *plonk*
You plonk too much.
*plonk*
(Sorry, couldn't resist! ;)
--
_ / ' _ / - aka -
( /)//)//)(//)/( Ronald J Kimball rjk@linguist.dartmouth.edu
/ http://www.tiac.net/users/chipmunk/
"It's funny 'cause it's true ... and vice versa."
------------------------------
Date: 05 May 1999 23:24:37 -0400
From: Uri Guttman <uri@sysarch.com>
Subject: Re: regexp for matching IP address block
Message-Id: <x7lnf2yj61.fsf@home.sysarch.com>
>>>>> "BF" == Benjamin Franz <snowhare@long-lake.nihongo.org> writes:
BF> In article <MPG.119a87433fbdbb349899d7@nntp.hpl.hp.com>,
BF> Larry Rosler <lr@hpl.hp.com> wrote:
>> In article <Yf5Y2.5935$ny.585199@typhoon-sf.snfc21.pbi.net> on Thu, 06
>> May 1999 00:21:12 GMT, Benjamin Franz <snowhare@long-lake.nihongo.org>
>> says...
>> ...
>> + if ($ip =~ m/^(((0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.){3}
<snip of monster regex>
>> + 429496729[0-5])$/ox) {
>>
>> Ahem. The /o is superfluous, because there is no interpolation in the
>> regex. <BIG GRIN>
>>
BF> Ah so! But you missed the actual *mistake* in the regex itself that
BF> allows exactly one completely impossible value to pass the test. Can you
BF> spot it?
who cares? i would much rather see something like (untested psuedo
code):
if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&
$1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ) {
process 4 part ip
}
elsif ( 3 part match ) {
blah blah!
}
elsif ( 2 part match ) {
blah blah!
}
elsif ( $ip =~ /^(\d+)$/ && $1 <= 255 ** 4
&& $1 > ??? do we allow just 0 or the
equivilent of 1.1.1.1?
) {
blah blah!
}
else {
die "your ip sucks!" ;
}
easier to understand, test and probably much faster than that massive
regex due to its heavy use of |.
but in general you do see more 4 parts than the others except when
hacking routers, netmasks and such. most logs and things have full 4
part ip numbers.
uri
--
Uri Guttman ----------------- SYStems ARCHitecture and Software Engineering
uri@sysarch.com --------------------------- Perl, Internet, UNIX Consulting
Have Perl, Will Travel ----------------------------- http://www.sysarch.com
The Best Search Engine on the Net ------------- http://www.northernlight.com
------------------------------
Date: Thu, 06 May 1999 03:58:37 GMT
From: snowhare@long-lake.nihongo.org (Benjamin Franz)
Subject: Re: regexp for matching IP address block
Message-Id: <Nr8Y2.6052$ny.610903@typhoon-sf.snfc21.pbi.net>
In article <x7lnf2yj61.fsf@home.sysarch.com>,
Uri Guttman <uri@sysarch.com> wrote:
>>>>>> "BF" == Benjamin Franz <snowhare@long-lake.nihongo.org> writes:
>
> BF> In article <MPG.119a87433fbdbb349899d7@nntp.hpl.hp.com>,
> BF> Larry Rosler <lr@hpl.hp.com> wrote:
> >> In article <Yf5Y2.5935$ny.585199@typhoon-sf.snfc21.pbi.net> on Thu, 06
> >> May 1999 00:21:12 GMT, Benjamin Franz <snowhare@long-lake.nihongo.org>
> >> says...
> >> ...
> >> + if ($ip =~ m/^(((0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.){3}
>
><snip of monster regex>
>
> >> + 429496729[0-5])$/ox) {
> >>
> >> Ahem. The /o is superfluous, because there is no interpolation in the
> >> regex. <BIG GRIN>
> >>
>
> BF> Ah so! But you missed the actual *mistake* in the regex itself that
> BF> allows exactly one completely impossible value to pass the test. Can you
> BF> spot it?
>
>who cares? i would much rather see something like (untested psuedo
>code):
>
> if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&
> $1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ) {
>
> process 4 part ip
> }
[snip]
>
>easier to understand, test and probably much faster than that massive
>regex due to its heavy use of |.
You think so? ;)
#!/usr/bin/perl -w
use strict;
use Benchmark;
my $ip_list = [];
for (my $count=0;$count<100;$count++) {
my $ip = int (rand (312)) . "." .
int (rand (312)) . "." .
int (rand (312)) . "." .
int (rand (312));
push (@$ip_list,$ip);
}
timethese (1000,
{ 'Evil Regex', sub {
foreach my $ip (@$ip_list) {
if ($ip =~ m/^(((0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.){3}
0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?))|
((0*25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.
0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.
(\d{1,4}|
[1-5]\d{1,9}|
6[0-4]\d{3}|
65[0-4]\d\d|
655[0-2]\d|
6553[0-5]))|
(0*(25[0-5]|2[0-4]\d|1\d\d|\d\d?)\.
(\d{1,7}|
1[0-5]\d{6}|
16[0-6]\d{5}|
167[0-6]\d{4}|
1677[0-6]\d{3}|
16777[01]\d\d|
1677720\d|
1677721[0-5]))|
\d{1,9}|
[1-3]\d{9}|
4[01]\d{8}|
42[0-8]\d{7}|
429[0-3]\d{6}|
4294[0-8]\d{5}|
42949[0-5]\d{4}|
429496[0-7]\d{3}|
4294967[01]\d{2}|
42949672[0-8]\d|
429496729[0-5])$/x) {
}
}
},
'Simple Regex' => sub {
foreach my $ip (@$ip_list) {
if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ &&
$1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ) {
}
}
},
});
Benchmark: timing 1000 iterations of Evil Regex, Simple Regex...
Evil Regex: 9 wallclock secs ( 8.20 usr + 0.00 sys = 8.20 CPU)
Simple Regex: 29 wallclock secs (26.87 usr + 0.00 sys = 26.87 CPU)
:)
It isn't the size; it's the organization.
>but in general you do see more 4 parts than the others except when
>hacking routers, netmasks and such. most logs and things have full 4
>part ip numbers.
True. The only place I usually see IPs in straight 32 bit unsigned form
is in spam.
--
Benjamin Franz
------------------------------
Date: 06 May 1999 00:10:10 -0400
From: Uri Guttman <uri@sysarch.com>
Subject: Re: regexp for matching IP address block
Message-Id: <x7iua6yh25.fsf@home.sysarch.com>
>>>>> "BF" == Benjamin Franz <snowhare@long-lake.nihongo.org> writes:
BF> In article <x7lnf2yj61.fsf@home.sysarch.com>,
BF> Uri Guttman <uri@sysarch.com> wrote:
>>>>>>> "BF" == Benjamin Franz <snowhare@long-lake.nihongo.org> writes:
>>
>>
>> easier to understand, test and probably much faster than that massive
>> regex due to its heavy use of |.
BF> You think so? ;)
BF> Evil Regex: 9 wallclock secs ( 8.20 usr + 0.00 sys = 8.20 CPU)
BF> Simple Regex: 29 wallclock secs (26.87 usr + 0.00 sys = 26.87 CPU)
BF> :)
BF> It isn't the size; it's the organization.
but can you then tell what form you had and what the parts are? i was
assuming different processing for each form of the ip after it
matched. in fact i wonder if you remove the checks from mine how much
faster it would be. they do lots of string to int conversions which suck
cpu.
Benchmark: timing 1000 iterations of Evil Regex, Simple Regex...
Evil Regex: 38 secs (35.23 usr 0.00 sys = 35.23 cpu)
Simple Regex: 16 secs (16.22 usr 0.00 sys = 16.22 cpu)
that was with the value checks removed. on a much slower cpu! :-)
yours does a proper check but in many case that is irrelevent. in a log
file how could a bad ip get there? so a simple parse out for use by a
sort program or some other log processing job would be better. and as we
agreed the large integer forms are usually junk so why even bother with
them.
uri
--
Uri Guttman ----------------- SYStems ARCHitecture and Software Engineering
uri@sysarch.com --------------------------- Perl, Internet, UNIX Consulting
Have Perl, Will Travel ----------------------------- http://www.sysarch.com
The Best Search Engine on the Net ------------- http://www.northernlight.com
------------------------------
Date: Wed, 05 May 1999 17:49:08 -0700
From: Frederic RIVOALLON <frederic@xilinx.com>
To: frederic@xilinx.com
Subject: Re: Square brackets in variable for regex
Message-Id: <3730E704.CCC303CA@xilinx.com>
<HTML>
<TT></TT>
<P><TT>I found the magic trick to do it (using the www.dejanews.com archive):
the \Q to quote metacharacters until the next \E</TT><TT></TT>
<P><TT>The code looks now like this</TT><TT></TT>
<P><TT>foreach $line (@mod) {</TT>
<BR><TT> foreach (keys %tab) { $line =~ s/\Q$_\E/$tab{$_}/g
}</TT>
<BR><TT> print $line;</TT>
<BR><TT>}</TT><TT></TT>
<P><TT>No need for the 'map' and 'tr' stuff...</TT><TT></TT>
<P><TT>Frédéric (Responding to himself)</TT><TT></TT>
<P><TT>Frederic RIVOALLON wrote:</TT>
<BLOCKQUOTE TYPE=CITE><TT> </TT><TT></TT>
<P><TT>Hi,</TT><TT></TT>
<P><TT> I would like to make substitutions based on variables that
could contain square brackets. I would like these brackets to be
interpreted as simple characters (not ranges)</TT><TT></TT>
<P><TT>Right now I use a 'tr' to get rid of these '[' and ']'. Is
there a way to inhibit their special behaviour?</TT><TT></TT>
<P><TT>%newtab = map { (my $x = $_) =~ tr/[]/<>/; $x } %tab;</TT>
<BR><TT>@newmod = map { (my $x = $_) =~ tr/[]/<>/; $x } @mod;</TT><TT></TT>
<P><TT>foreach $line (@newmod) {</TT>
<BR><TT> foreach (keys %newtab) { $line =~ s/$_/$newtab{$_}/g
}</TT>
<BR><TT> print $line;</TT>
<BR><TT>}</TT>
<BR><TT> </TT><TT></TT>
<P><TT>Frédéric</TT>
<BR><TT> </TT></BLOCKQUOTE>
<TT> </TT></HTML>
------------------------------
Date: Thu, 6 May 1999 03:49:50 GMT
From: Eric Bohlman <ebohlman@netcom.com>
Subject: Re: Square brackets in variable for regex
Message-Id: <ebohlmanFBALB2.8CI@netcom.com>
Frederic RIVOALLON <frederic@xilinx.com> wrote:
: <HTML>
: <TT></TT>
Could you *please* tell your "newsreader" (Netscape 4.05 for NT,
apparently) to post articles in plain text rather than HTML, let alone
moronized HTML like <TT></TT>? I believe it's an option on one of the
"preferences" menus.
------------------------------
Date: 6 May 1999 00:18:21 -0500
From: gazelle@yin.interaccess.com (Kenny McCormack)
Subject: Re: What is the opposite of bind() ?
Message-Id: <7gr8mt$204$1@yin.interaccess.com>
In article <7gqkdt$t8l$1@fir.prod.itd.earthlink.net>,
Bob Trieger <sowmaster@juicepigs.com> wrote:
>tadmc@metronet.com (Tad McClellan) wrote:
>>Kenny McCormack (gazelle@yin.interaccess.com) wrote:
>>
>>: I have a Perl script that is a variation of the server program in the book.
>> ^^^^^^^^
>>
>> I didn't know that the Bible had Perl code in it.
>>
>> Ya learn something every day!
>
>If the Bible was written in perl would JC have used s/ater/ine/ to turn
>"water" into "wine"?
>
>Sort of leaves me wondering if they would have lost the body if they
>used this line:
>
>close CAVE or die "Hey Pontius! The cave did not close: $!";
Thank you for totally derailing this thread.
------------------------------
Date: Thu, 6 May 1999 01:35:39 -0400
From: rjk@linguist.dartmouth.edu (Ronald J Kimball)
Subject: Re: What is the opposite of bind() ?
Message-Id: <1drd00z.j0b52076tmgzN@p67.block2.tc3.state.ma.tiac.com>
Kenny McCormack <gazelle@yin.interaccess.com> wrote:
> I have a Perl script that is a variation of the server program in the book.
Which book?
> It uses bind() to bind the socket to the port. The problem is that if
> I'm debugging it, I run it, control/C it, edit it, run it again, and
> get "bind: address already in use".
Frustrating, isn't it? I've had that problem too.
You need to set the socket option REUSEADDR before you call bind(). One
way to do this is with the builtin setsockopt(). Another is to use the
methods in IO::Socket module. (I prefer the latter.)
--
chipmunk (Ronald J Kimball) <rjk@linguist.dartmouth.edu>
perl -e 'print map chop, sort split shift, reverse shift
' 'j_' 'e._jP;_jr/_je=_jk{_jn*_j &_j :_j @_jr}_ja)_js$_j
~_jh]_jt,_jo+_jJ"_jr>_ju#_jt%_jl?_ja^_jc`_jh-_je|' -rjk-
------------------------------
Date: 12 Dec 98 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Special: Digest Administrivia (Last modified: 12 Dec 98)
Message-Id: <null>
Administrivia:
Well, after 6 months, here's the answer to the quiz: what do we do about
comp.lang.perl.moderated. Answer: nothing.
]From: Russ Allbery <rra@stanford.edu>
]Date: 21 Sep 1998 19:53:43 -0700
]Subject: comp.lang.perl.moderated available via e-mail
]
]It is possible to subscribe to comp.lang.perl.moderated as a mailing list.
]To do so, send mail to majordomo@eyrie.org with "subscribe clpm" in the
]body. Majordomo will then send you instructions on how to confirm your
]subscription. This is provided as a general service for those people who
]cannot receive the newsgroup for whatever reason or who just prefer to
]receive messages via e-mail.
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 5577
**************************************