[26714] in Perl-Users-Digest
Perl-Users Digest, Issue: 8810 Volume: 10
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Dec 29 18:13:56 2005
Date: Thu, 29 Dec 2005 15:05:04 -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, 29 Dec 2005 Volume: 10 Number: 8810
Today's topics:
Re: 'file changed'-event (Hue-Bond)
Re: Addressing the cursor of a VT100 style terminal emu <samwyse@gmail.com>
Re: My Regexp XML Parser -> Structured Perl Data, Cut robic0
Ordering string of commands in a file (Raghuramaiah Gompa)
Re: Ordering string of commands in a file <someone@example.com>
Re: Serious Perl Regular Expression deficiency? robic0
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Thu, 29 Dec 2005 22:48:23 +0000 (UTC)
From: "David Serrano (Hue-Bond)" <responder_solo_en_el_grupo@yahoo.es>
Subject: Re: 'file changed'-event
Message-Id: <slrndr8ptn.4uf.responder_solo_en_el_grupo@genus.hue-bond.info>
Veli-Pekka Tätilä, jue20051229@11:48:56(CET):
>
> You didn't mention your operating system in the post. If you happen to be
> running Windows, might the Win32::ChangeNotify module be of help?
And with linux, Linux::Inotify.
--
David Serrano
------------------------------
Date: Thu, 29 Dec 2005 16:14:19 GMT
From: Samwyse <samwyse@gmail.com>
Subject: Re: Addressing the cursor of a VT100 style terminal emulator using perl
Message-Id: <vXTsf.40081$BZ5.23871@newssvr13.news.prodigy.com>
Thomas Dickey wrote:
> Samwyse <samwyse@gmail.com> wrote:
>
>>Actually, when a terminal is resized, your app gets a SIGWINCH signal.
>>You should then issue an ioctl to get the new size:
>> struct winsize size;
>> ioctl(fileno(stdout), TIOCGWINSZ, &size);
>>This way, you don't have to query the terminal and worry about the user
>>hitting a key at the wrong time. The ncurses library handles all of
>>this for you, I suppose that Term::Cap does as well. The next time you
>
> I don't belive Term::Cap does this since it doesn't have a getch() method.
> (likewise Term::AnsiColor).
Well, what good is it, then? ;-)
OK, http://www.google.com/search?q=perl+KEY_RESIZE tells us about
Term::Visual, which notes that it handles KEY_RESIZE by repainting the
screen. This looks like a useful high-level package for all sort of
ncurses-like functionality. While I assume that it uses ncurses,
there's no actual mention of how it gets that keystroke, but reading a
module's source is always a fun way to spend the dead time between Xmas
and New Year's.
http://www.google.com/search?q=perl+TIOCGWINSZ turns up nothing that
seems useful at first glance.
http://www.google.com/search?q=perl+KEY_SIGWINCH turns up the fact that
Term::ReadKey has a method for this type of stuff, and it works across
both *NIX and Win32. If you don't/can't use Term::Visual for some
reason, maybe it will be helpful.
=====
GetTerminalSize [Filehandle]
Returns either an empty array if this operation is unsupported, or
a four element array containing: the width of the terminal in
characters, the height of the terminal in character, the width in
pixels, and the height in pixels. (The pixel size will only be valid in
some environments.)
Under Windows, this function must be called with an "output"
filehandle, such as STDOUT, or a handle opened to CONOUT$.
------------------------------
Date: Thu, 29 Dec 2005 14:24:18 -0800
From: robic0
Subject: Re: My Regexp XML Parser -> Structured Perl Data, Cut & Paste Version, No Module's (Vol I)
Message-Id: <btn8r15f0e3o7790g67ca9s5margl10t5h@4ax.com>
On Tue, 20 Dec 2005 23:59:06 -0800, robic0 wrote:
For easier reading and after an adjustment to Agent, I have expanded the width of my posts to 200 chrs/line.
This is still version .902. I wll modularize this and add exception processing on the next go round.
-robic0-
print <<EOM;
# -----------------------
# XML Regex Parser
# Version .902 - 12/28/05
# Copyright 2005,
# by robic0-At-yahoo.com
# -----------------------
EOM
use strict;
use warnings;
use Data::Dumper;
#open DATA, "sumfile.xml" or die "can't open datafile...";
#my $gabage1 = join ('', <DATA>);
#close DATA;
my $gabage4 = '
<big name="asdf" date="33" >
asdf
<in1>
<!-- howdy f*%$olks -->
<in2>jjjj</in2>
<small biz="wefwf" ueue = "second" />
<!-- and still more -->
<bar><inside>asgfasdf<insF>2</insF>sdfb</inside></bar>
</in1>
<in2>some in3 content</in2>
asdfb
</big>
';
my $gabage5 = '
<root>
<!--
wasdfvgasvbg <![CDATA[ not really a CDATA ]]>
<tag>at tag in a real comment</tag>
<![CDATA[ not a CDATA ]]>
-->
<!-- This is a real comment -->
this is some content
<stag><br>some br stuff</br>after<t>some t
</t>
</stag>
<![CDATA[ <!-- imbed comment --> some text <!-- imbed as well -->]]>
<![CDATA[ <!-- imbed comment --> some text <!-- imbed as well -->]]>
</root>
';
my $gabage6 = "
<!-- This is a real comment -->
<node1
name = 'Barney'
date = \"1/1/05\"
/>
";
my $gabage7 = "
<node1
tire = 'Michelan'
size = \"235 x 16\">
Recalled by factory</node1>
";
my $gabage8 = "
<node1
color = 'green'
vtype = \"truck'
/>
";
my $gabage9 = '
<node>this is a node</node>
<node>this is a different</node>
';
my $gabage10 = '
<Node>this is a node</node>
<node>this is a different</Node>
';
my @xml_strings = ($gabage4, $gabage5, $gabage6, $gabage7, $gabage9, $gabage10);
my $VERSION = .902;
my $debug = 0;
my $rmv_white_space = 0;
my $ForceArray = 0;
my $KeepRoot = 0;
my $KeepComments = 0;
## -- XML, start & end regexp substitution delimiter chars --
## match side , substitution side
## -------------------------/-------------------------------
my (@S_dlim, @E_dlim);
if ($debug) {
@S_dlim = ('\[' , '['); # use these for debug
@E_dlim = ('\]' , ']');
} else {
@S_dlim = (chr(140) , chr(140)); # use these for production
@E_dlim = (chr(141) , chr(141));
}
## -- Process xml data --
##
for (@xml_strings)
{
print "\n",'*'x30,"\nXML string:\n",'-'x15,"$_\n\nOutput:\n",'-'x15,"\n\n";
my $ROOT = {}; # container
my %cdata_elements = ();
my ($last_cnt, $cnt, $i, $attr_error) = (-1, 1, 0, 0);
## Comment/CDATA block ==================================
#### To be done first -
# -- Questionable Comments --
while (s/(<!--(.*?)-->)/$S_dlim[1]$cnt$E_dlim[1]/s) {
#print "$cnt = Questionable comment: $1\n" if ($debug);
$ROOT->{$cnt} = $1;
$cnt++;
}
#### To be done second -
# -- Real CDATA --
while (s/<!\[CDATA\[(.*?)\]\]>/$S_dlim[1]$cnt$E_dlim[1]/s)
{
# reconstitute cdata contents
my $cdata_contents = $1;
my $str = '';
while ($cdata_contents =~ s/([^$S_dlim[0]$E_dlim[0]]+)|$S_dlim[0]([\d]+)$E_dlim[0]//) {
if (defined $1) {
$str .= $1;
} elsif (defined $2 && exists $ROOT->{$2}) {
$str .= $ROOT->{$2};
delete $ROOT->{$2};
} else {} # shouldn't get here
}
print "$cnt CDATA = $str\n" if ($debug);
$ROOT->{$cnt} = $str;
$cdata_elements{$cnt} = '';
$cnt++;
}
#### To be done third -
# -- Real Comments are left --
foreach my $key (sort {$a <=> $b} keys %{$ROOT}) {
if (!exists $cdata_elements{$key}) {
$ROOT->{$key} =~ s/^<!--(.*?)-->$/$1/s;
print "$key Comment = $1\n" if ($debug);
if ($KeepComments) {
$ROOT->{$key} = { comment => $1 };
} else {delete $ROOT->{$key};}
}
}
## End Comment/CDATA block ==============================
#### Non-tag markup go here -
# -- Versioning -- <?XML-Version ?> , have to check the format of '<?'
while (s/<\?([^<>]*)\?>//) {} # void xml versioning for now
# while (s/<\?([^<>]*)\?>/$S_dlim[1]$cnt$E_dlim[1]/)
# { print "$cnt <$1> = \n" if ($debug); $cnt++}
#### White space removal before tags ? .. TBD -
if ($rmv_white_space) {
s/>[\s]+</></g;
s/[\s]+</</g;
s/>[\s]+/>/g;
}
#### Tags here - should only need 2 iterations max
my $finished = 0;
while ($cnt != $last_cnt && $i < 20)
{
$last_cnt = $cnt;
## <Tag/> , no content
while (s/<([0-9a-zA-Z]+)\/>/$S_dlim[1]$cnt$E_dlim[1]/) {
print "$cnt <$1> = \n" if ($debug);
$ROOT->{$cnt} = { $1 => '' };
$cnt++;
}
## <Tag Attributes/> , no content
while (s/<([0-9a-zA-Z]+)([\s]+[0-9a-zA-Z]+[\s]*=[\s]*["'][^<]*['"])+[\s]*\/>/$S_dlim[1]$cnt$E_dlim[1]/) {
print "$cnt <$1> = attr: $2\n" if ($debug);
my $hattrib = getAttrHash($2);
if (ref($hattrib) ne "HASH") {
print "Invalid token in attribute asignment:\n$hattrib\n"; $attr_error = 1; last;
}
$ROOT->{$cnt} = { $1 => $hattrib };
$cnt++;
}
## <Tag> Content </Tag>
while (s/<([0-9a-zA-Z]+)>([^<]*)<\/\1>/$S_dlim[1]$cnt$E_dlim[1]/) {
print "$cnt <$1> = $2\n" if ($debug);
my $unknown = '';
if (length($2) > 0) {
my $hcontent = getContentHash($2, $ROOT, \%cdata_elements);
$unknown = $hcontent;
if (keys (%{$hcontent}) > 1) {
if (!$ForceArray) { adjustForSingleItemArrays ($hcontent); }
} else {
if (exists $hcontent->{'content'} && scalar(@{$hcontent->{'content'}}) == 1) {
if (!$ForceArray ) {
$unknown = ${$hcontent->{'content'}}[0];
} else {$unknown = $hcontent->{'content'}; }
}
if (!$ForceArray) { adjustForSingleItemArrays ($hcontent); }
}
}
$ROOT->{$cnt} = { $1 => $unknown };
$cnt++;
}
last if ($attr_error);
## <Tag Attributes> Content </Tag>
while (s/<([0-9a-zA-Z]+)([\s]+[0-9a-zA-Z]+[\s]*=[\s]*["'][^<]*['"])+[\s]*>([^<]*)<\/\1>/$S_dlim[1]$cnt$E_dlim[1]/) {
print "$cnt <$1> = attr: $2, content: $3\n" if ($debug);
my $hattrib = getAttrHash($2);
if (ref($hattrib) ne "HASH") {
print "Invalid token in attribute asignment:\n$hattrib\n"; $attr_error = 1; last;
}
if (length($3) > 0) {
my $hcontent = getContentHash($3, $ROOT, \%cdata_elements);
if (!$ForceArray) { adjustForSingleItemArrays ($hcontent); }
while (my ($key,$val) = each (%{$hcontent})) {
$hattrib->{$key} = $val;
}
}
$ROOT->{$cnt} = { $1 => $hattrib };
$cnt++;
}
last if ($attr_error);
if ($last_cnt != $cnt) {
$i++; print "** End pass $i\n" if ($debug);
} else {
last if ($finished);
## Encapsulate the xml with a "root"
$_ = "<root>$_</root>";
$last_cnt--;
$finished = 1;
}
}
last if ($attr_error);
if (/<|>/) {
print "($i) XML problem: malformed, syntax or tag closure:\n$_";
} else {
print "\n** Itterations = $i\n** ForceArray = $ForceArray\n** KeepRoot = $KeepRoot\n** KeepComments = $KeepComments\n\n";
#print Dumper($ROOT);
print "The remaining string is:\n$_\n\n" if ($debug);
## Strip off the outer element (our root) to
## examine the contents for errors.
## ---------------------------------------
my $outer_element = $cnt-1;
if (exists $ROOT->{$outer_element}) {
my $hroot = $ROOT->{$outer_element};
my ($key,$val) = each (%{$hroot});
my $htodump = $val;
# check for errors in root
if (ref($htodump) ne "HASH" || exists $htodump->{'content'}) {
print "Error, bare content at root level ..\n";
} else {
my $dmp_keys = keys (%{$htodump});
if ($dmp_keys > 1) {
print "Warning, multiple elements at root level ..\n";
} else {
($key,$val) = each (%{$htodump});
my $dmp_type = ref($val);
if ($dmp_keys == 0 || (exists $htodump->{'comment'})) {
print "Warning, no elements at root level ..\n";
}
if ($dmp_keys == 1) {
if ($dmp_type eq "HASH") {
$htodump = $val if (!$KeepRoot);
}
elsif ($dmp_type eq "ARRAY") {
if (!$ForceArray || scalar(@{$val}) > 1) {
print "Warning, multiple elements at root level ..\n";
}
}
}
}
}
print "\n";
my $tmp = {};
%{$tmp} = %{$htodump};
print Dumper($tmp);
} else {
print "nothing to output!\n";
}
}
}
##
sub adjustForSingleItemArrays
{
my $href = shift;
## if $val is an array ref and has one element
## set $href->{$key} equal to the element
while (my ($key,$val) = each (%{$href})) {
if (ref($val) eq "ARRAY") {
if (scalar(@{$val}) == 1) {
$href->{$key} = $val->[0];
}
}
}
}
##
sub getAttrHash
{
my $attrstr = shift;
my $ahref = {};
return $ahref unless (defined $attrstr);
while ($attrstr =~ s/[\s]*([0-9a-zA-Z]+)[\s]*=[\s]*("|')([^=]*)\2[\s]*//i) {
$ahref->{$1} = $3;
}
if ($attrstr=~/=/) {
$attrstr =~ s/^\s+//s;
$attrstr =~ s/\s+$//s;
return $attrstr
}
return $ahref;
}
##
sub getContentHash
{
my ($contstr,$hStore,$hcdata_elements) = @_;
my $ahref = {};
return $ahref unless (defined $contstr && defined $hStore && defined $hcdata_elements);
my @ary = ();
my $append_flag = 0;
while ($contstr =~ s/^([^<$S_dlim[0]$E_dlim[0]]+)|$S_dlim[0]([\d]+)$E_dlim[0]//s) {
if (defined $1) {
my $tmp1 = $1;
# if flagged, append it to $ary[last]
if ($append_flag && scalar(@ary) > 0) {
my $size = scalar(@ary);
$ary[$size-1] .= $tmp1;
} else {
push (@ary, $1);
}
$append_flag = 0;
}
elsif (defined $2) {
# if it doesen't exist (Comments stripped?)
# turn on append flag.
if (!exists $hStore->{$2}) {
$append_flag = 1;
next;
}
# if its a CDATA, append it to $ary[last],
# turn on append flag.
if (exists $hcdata_elements->{$2}) {
my $size = scalar(@ary);
if ($size > 0) {
$ary[$size-1] .= $hStore->{$2};
} else {push (@ary, $hStore->{$2});}
$append_flag = 1;
next;
}
my ($key,$val) = each (%{$hStore->{$2}});
if (exists $ahref->{$key}) {
push (@{$ahref->{$key}}, $val);
} else {
$ahref->{$key} = [$val];
}
$append_flag = 0;
}
else {} # shouldn't get here
}
# store contents, strip out
# pure whitespace text elements
my $hary = [];
for (@ary) {
next if (/^\s+$/s);
push (@{$hary}, $_);
}
if (scalar(@{$hary}) > 0) {
$ahref->{'content'} = $hary;
}
## if $val is an array ref and has one element and it
## is a hash ref, set {$key} equal to hash ref
if (!$ForceArray) {
while (my ($key,$val) = each (%{$ahref})) {
if (ref($val) eq "ARRAY") {
if (scalar(@{$val}) == 1 && ref($val->[0]) eq "HASH") {
$ahref->{$key} = $val->[0];
}
}
}
}
return $ahref;
}
__END__
# -----------------------
# XML Regex Parser
# Version .902 - 12/28/05
# Copyright 2005,
# by robic0-At-yahoo.com
# -----------------------
******************************
XML string:
---------------
<big name="asdf" date="33" >
asdf
<in1>
<!-- howdy f*%$olks -->
<in2>jjjj</in2>
<small biz="wefwf" ueue = "second" />
<!-- and still more -->
<bar><inside>asgfasdf<insF>2</insF>sdfb</inside></bar>
</in1>
<in2>some in3 content</in2>
asdfb
</big>
Output:
---------------
** Itterations = 2
** ForceArray = 0
** KeepRoot = 0
** KeepComments = 0
$VAR1 = {
'in2' => 'some in3 content',
'date' => '33',
'name' => 'asdf',
'content' => [
'
asdf
',
'
asdfb
'
],
'in1' => {
'small' => {
'ueue' => 'second',
'biz' => 'wefwf'
},
'bar' => {
'inside' => {
'insF' => '2',
'content' => [
'asgfasdf',
'sdfb'
]
}
},
'in2' => 'jjjj'
}
};
******************************
XML string:
---------------
<root>
<!--
wasdfvgasvbg <![CDATA[ not really a CDATA ]]>
<tag>at tag in a real comment</tag>
<![CDATA[ not a CDATA ]]>
-->
<!-- This is a real comment -->
this is some content
<stag><br>some br stuff</br>after<t>some t
</t>
</stag>
<![CDATA[ <!-- imbed comment --> some text <!-- imbed as well -->]]>
<![CDATA[ <!-- imbed comment --> some text <!-- imbed as well -->]]>
</root>
Output:
---------------
** Itterations = 2
** ForceArray = 0
** KeepRoot = 0
** KeepComments = 0
$VAR1 = {
'content' => [
'
this is some content
',
'
<!-- imbed comment --> some text <!-- imbed as well -->
<!-- imbed comment --> some text <!-- imbed as well -->
'
],
'stag' => {
'br' => 'some br stuff',
'content' => 'after',
't' => 'some t
'
}
};
******************************
XML string:
---------------
<!-- This is a real comment -->
<node1
name = 'Barney'
date = "1/1/05"
/>
Output:
---------------
** Itterations = 2
** ForceArray = 0
** KeepRoot = 0
** KeepComments = 0
$VAR1 = {
'date' => '1/1/05',
'name' => 'Barney'
};
******************************
XML string:
---------------
<node1
tire = 'Michelan'
size = "235 x 16">
Recalled by factory</node1>
Output:
---------------
** Itterations = 2
** ForceArray = 0
** KeepRoot = 0
** KeepComments = 0
$VAR1 = {
'content' => '
Recalled by factory',
'tire' => 'Michelan',
'size' => '235 x 16'
};
******************************
XML string:
---------------
<node>this is a node</node>
<node>this is a different</node>
Output:
---------------
** Itterations = 2
** ForceArray = 0
** KeepRoot = 0
** KeepComments = 0
Warning, multiple elements at root level ..
$VAR1 = {
'node' => [
'this is a node',
'this is a different'
]
};
******************************
XML string:
---------------
<Node>this is a node</node>
<node>this is a different</Node>
Output:
---------------
(0) XML problem: malformed, syntax or tag closure:
<root>
<Node>this is a node</node>
<node>this is a different</Node>
</root>
------------------------------
Date: Thu, 29 Dec 2005 16:30:23 +0000 (UTC)
From: rgompa@steel.ucs.indiana.edu (Raghuramaiah Gompa)
Subject: Ordering string of commands in a file
Message-Id: <dp12uv$8lu$1@rainier.uits.indiana.edu>
I have a file that has lines like the following:
Titl1=B2a
Command1=c:\chi\cw.exe
Title2=f2a
Directory1=c:\chi
Type1=1
Command2=c:\chi\cw.exe
Directory2=c:\chi
Options2=%@%
Type11=2
Title14=Ma3
Command14=c:\chi\cpb.bat
Options14=c:\temp\temp.bin
Use long names3=1
Title12=Dir
Command12=Tfd
Title13=a2h
Command13=c:\bat\a2h.bat
Options13=%@dpn%
Show13=2
Command31=C:\bat\tview.bat
Use long names31=1
Title31=tview
.....
Basically Title,Command, Show,... constitute a group of commands that are associated with the
name described in Title. Now I want to reorder them in the alphabetical order of names described in
Title. For instance, the new file should have :
Title1=a2h
Command1=c:\bat\a2h.bat
Options1=%@dpn%
Show1=2
and all the lines (Title2=B2a, ..) are changed accordingly (because or the order a2h, B2a, Dir, f2a, Ma3, .... )
How can I achieve this? Please help. .. Raghu
------------------------------
Date: Thu, 29 Dec 2005 20:35:16 GMT
From: "John W. Krahn" <someone@example.com>
Subject: Re: Ordering string of commands in a file
Message-Id: <8MXsf.14802$AP5.13440@edtnps84>
Raghuramaiah Gompa wrote:
> I have a file that has lines like the following:
>
> Titl1=B2a
> Command1=c:\chi\cw.exe
> Title2=f2a
> Directory1=c:\chi
> Type1=1
> Command2=c:\chi\cw.exe
> Directory2=c:\chi
> Options2=%@%
> Type11=2
> Title14=Ma3
> Command14=c:\chi\cpb.bat
> Options14=c:\temp\temp.bin
> Use long names3=1
> Title12=Dir
> Command12=Tfd
> Title13=a2h
> Command13=c:\bat\a2h.bat
> Options13=%@dpn%
> Show13=2
> Command31=C:\bat\tview.bat
> Use long names31=1
> Title31=tview
> .....
>
> Basically Title,Command, Show,... constitute a group of commands that are associated with the
> name described in Title. Now I want to reorder them in the alphabetical order of names described in
> Title. For instance, the new file should have :
>
> Title1=a2h
> Command1=c:\bat\a2h.bat
> Options1=%@dpn%
> Show1=2
>
> and all the lines (Title2=B2a, ..) are changed accordingly (because or the order a2h, B2a, Dir, f2a, Ma3, .... )
>
> How can I achieve this? Please help. .. Raghu
Perhaps something like this:
#!/usr/bin/perl
use warnings;
use strict;
my %hash = do { local $/; grep length, split /^(Title\d+=.+)/m, <DATA> };
print
map $_->[ 1 ],
sort { lc $a->[ 0 ] cmp lc $b->[ 0 ] }
map [ /=(.+)/, "$_$hash{$_}" ],
keys %hash;
__DATA__
Title1=B2a
Command1=c:\chi\cw.exe
Title2=f2a
Directory1=c:\chi
Type1=1
Command2=c:\chi\cw.exe
Directory2=c:\chi
Options2=%@%
Type11=2
Title14=Ma3
Command14=c:\chi\cpb.bat
Options14=c:\temp\temp.bin
Use long names3=1
Title12=Dir
Command12=Tfd
Title13=a2h
Command13=c:\bat\a2h.bat
Options13=%@dpn%
Show13=2
Command31=C:\bat\tview.bat
Use long names31=1
Title31=tview
John
--
use Perl;
program
fulfillment
------------------------------
Date: Thu, 29 Dec 2005 14:10:38 -0800
From: robic0
Subject: Re: Serious Perl Regular Expression deficiency?
Message-Id: <dhn8r1dfsub8gtpql49p80vhe36089emk9@4ax.com>
On Tue, 27 Dec 2005 20:57:09 -0600, Tad McClellan <tadmc@augustmail.com> wrote:
>robic0 <> wrote:
>> On Fri, 23 Dec 2005 15:17:21 -0800, robic0 wrote:
>>
>> Thanks for the patients folks.
>
>
>You crack me up, doctor!
>
>
>> I'm doing a xml
>> parser using just regex so I want to get this right.
>
>
>That is mathematically impossible you know.
>
>You will be working on it for a long long time, and never have it right.
>
>
>> I have concentrated on the docs on regex for this and
>> oh my god its got problems.
>
>
>Yes, parsing a Context Free language using a Regular grammar
>is simply not possible.
>
>(but Perl's regular expressions aren't actually "regular" at all.)
>
>
>> I would like the writers
>> of Perl and Larry Wall to take a look at the code below.
>
>
>I would like you to read the Dragon Book.
>
>
>> In other words, given the
>> XML specifications, this will always work.
>
>
>Yeah, right.
You crack me up dude, it works great. The code is integrated into
the main work. No problems whatsoever. I'm not going to invest time
in code that doesen't work. Never have, never will.
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V10 Issue 8810
***************************************