[31574] in Perl-Users-Digest
Perl-Users Digest, Issue: 2833 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Feb 24 14:09:24 2010
Date: Wed, 24 Feb 2010 11:09:07 -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 Wed, 24 Feb 2010 Volume: 11 Number: 2833
Today's topics:
Re: eval exit/exec (was: macros: return or exit) <marc.girod@gmail.com>
Re: eval exit/exec (was: macros: return or exit) <ben@morrow.me.uk>
Need help with Wx and loops <steve@staticg.com>
Re: Need help with Wx and loops <steve@staticg.com>
Re: Need help with Wx and loops <tadmc@seesig.invalid>
open source spell checker for German <massion@gmx.de>
Re: perl advanced question <robin1@cnsp.com>
Re: retrieve file after posting some data <derykus@gmail.com>
Re: use strict... <steve@staticg.com>
Re: use strict... <tadmc@seesig.invalid>
Re: Windows: How to sleep until key is pressed sln@netherlands.com
Re: Windows: How to sleep until key is pressed sln@netherlands.com
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Wed, 24 Feb 2010 02:07:50 -0800 (PST)
From: Marc Girod <marc.girod@gmail.com>
Subject: Re: eval exit/exec (was: macros: return or exit)
Message-Id: <53d319e0-2d55-4de9-8cc6-99641fea942d@g11g2000yqe.googlegroups.com>
On Feb 21, 8:47=A0pm, Marc Girod <marc.gi...@gmail.com> wrote:
> May I override *::exit and *::exec with a function doing die?
Maybe a typo of mine didn't help:
release> perl -le '*::exit=3D\die;$rc =3D eval{exit "foo"};if($@){print$@}
else{print$rc}'
Died at -e line 1.
release> perl -le '*::exec=3D\die;$rc =3D eval{exec "foo"};if($@){print$@}
else{print$rc}'
Died at -e line 1.
So, at least these work.
Now, I can see that it may not be a good idea to redefine such globale
functions.
E.g. for the case when some other package below would also attempt to
redefine them (not a better idea, probably, and without much brighter
perspectives).
I can check that this work as well:
release> perl -le 'package Foo; *Foo::exit=3D\die;$rc =3D eval{exit
"foo"};if($@){print$@}else{print$rc}'
Died at -e line 1.
So, I got the answer to my own questions.
I'll try to make better ones next time.
Thanks,
Marc
------------------------------
Date: Wed, 24 Feb 2010 13:44:13 +0000
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: eval exit/exec (was: macros: return or exit)
Message-Id: <d2nf57-f0m.ln1@osiris.mauzo.dyndns.org>
Quoth Marc Girod <marc.girod@gmail.com>:
> On Feb 21, 8:47 pm, Marc Girod <marc.gi...@gmail.com> wrote:
>
> > May I override *::exit and *::exec with a function doing die?
>
> Maybe a typo of mine didn't help:
>
> release> perl -le '*::exit=\die;$rc = eval{exit "foo"};if($@){print$@}
> else{print$rc}'
> Died at -e line 1.
Err... no. You can't take a ref to a builtin. The \die expression just
calls die then and there. Also, you can only override a builtin from
within a different package, and the override must happen at compile
time.
BEGIN { package Foo; *main::exit = sub { die } }
> So, at least these work.
> Now, I can see that it may not be a good idea to redefine such globale
> functions.
> E.g. for the case when some other package below would also attempt to
> redefine them (not a better idea, probably, and without much brighter
> perspectives).
Note that an override for &main::exit only applies to code compiled in
package main. Other code will still see CORE::exit.
Ben
------------------------------
Date: Wed, 24 Feb 2010 09:45:36 -0800 (PST)
From: Steve <steve@staticg.com>
Subject: Need help with Wx and loops
Message-Id: <43aea72a-521e-47ca-a7cb-56f417b74cb0@k18g2000prf.googlegroups.com>
I'm just doing this for learning, and I can't figure it out. What
this is supposed to do is when I click the start button, it constantly
moves anything from 1 folder to another until I click the stop button.
I have 2 problems with my code: 1. strict doesn't like it, and 2. the
button stays pressed forever and I cannot initiate the stop button.
strict doesn't like it because I can't seem to remember exactly how to
declare a global variable. I attempted state $x = 1; but it didn't
like that. So in my code I show it's changed so strict is not in use
and I just declare it as $x = 1; (I know this is wrong :P).
here is my code:
#!/usr/bin/perl -w
#use strict;
use Wx;
###########################################################
#
# Define importsvc class that extends Wx::App
#
package importsvc;
use base qw(Wx::App); # Inherit from Wx::App
use Wx::Event qw(EVT_BUTTON);
sub OnInit
# Every application has its own OnInit method that will
# be called when the constructor is called.
{
my $self = shift;
my $frame = Wx::Frame->new( undef, # Parent window
-1, # Window id
'Import Services', # Title
[200,300], # position X, Y
[250, 150] # size X, Y
);
my $panel = Wx::Panel->new($frame,-1); #create a panel in the
parent window $frame
my $start = Wx::Button->new($panel,1,"Start Import",[10,10]);
my $stop = Wx::Button->new($panel,1,"Stop Import",[10,40]);
EVT_BUTTON($start,$start,\&startimport);
EVT_BUTTON($stop,$stop,\&stopimport);
$self->SetTopWindow($frame); # Define the toplevel window
$frame->Show(1); # Show the frame
}
sub startimport {
$x = 1;
while( $x == "1"){
system "mv /home/steve/Desktop/INCOMING/* /home/steve/Desktop/
IMPORTED";
}
}
sub stopimport {
$x = 0;
}
###########################################################
#
# The main program
#
package main;
mkdir "/home/steve/Desktop/INCOMING";
system "touch /home/steve/Desktop/INCOMING/transmission1.txt";
system "touch /home/steve/Desktop/INCOMING/transmission2.txt";
system "touch /home/steve/Desktop/INCOMING/transmission3.txt";
system "touch /home/steve/Desktop/INCOMING/transmission4.txt";
mkdir "/home/steve/Desktop/IMPORTED";
my $wxobj = importsvc->new(); # New HelloWorld application
$wxobj->MainLoop;
------------------------------
Date: Wed, 24 Feb 2010 10:24:08 -0800 (PST)
From: Steve <steve@staticg.com>
Subject: Re: Need help with Wx and loops
Message-Id: <99789221-486d-47b9-baf9-1cf09232c557@y7g2000prc.googlegroups.com>
On Feb 24, 9:45=A0am, Steve <st...@staticg.com> wrote:
> I'm just doing this for learning, and I can't figure it out. =A0What
> this is supposed to do is when I click the start button, it constantly
> moves anything from 1 folder to another until I click the stop button.
>
> I have 2 problems with my code: 1. strict doesn't like it, and 2. the
> button stays pressed forever and I cannot initiate the stop button.
>
> strict doesn't like it because I can't seem to remember exactly how to
> declare a global variable. =A0I attempted state $x =3D 1; but it didn't
> like that. =A0So in my code I show it's changed so strict is not in use
> and I just declare it as $x =3D 1; (I know this is wrong :P).
>
> here is my code:
>
> #!/usr/bin/perl -w
> #use strict;
> use Wx;
>
> ###########################################################
> #
> # Define importsvc class that extends Wx::App
> #
> package importsvc;
> use base qw(Wx::App); =A0 # Inherit from Wx::App
> use Wx::Event qw(EVT_BUTTON);
> =A0 =A0sub OnInit
> =A0 =A0# Every application has its own OnInit method that will
> =A0 =A0# be called when the constructor is called.
> =A0 =A0{
> =A0 =A0 =A0 my $self =3D shift;
> =A0 =A0 =A0 my $frame =3D Wx::Frame->new( undef, =A0 =A0 =A0 =A0 # Parent=
window
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -1, =
=A0 =A0 =A0 =A0 =A0 =A0# Window id
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 'Impo=
rt Services', # Title
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 [200,=
300], =A0 =A0 =A0 =A0 # position X, Y
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 [250,=
150] =A0 =A0 # size X, Y
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 );
> =A0 =A0 =A0my $panel =3D Wx::Panel->new($frame,-1); #create a panel in th=
e
> parent window $frame
> =A0 =A0 =A0my $start =3D Wx::Button->new($panel,1,"Start Import",[10,10])=
;
> =A0 =A0 =A0my $stop =3D Wx::Button->new($panel,1,"Stop Import",[10,40]);
> =A0 =A0 =A0EVT_BUTTON($start,$start,\&startimport);
> =A0 =A0 =A0EVT_BUTTON($stop,$stop,\&stopimport);
> =A0 =A0 =A0$self->SetTopWindow($frame); =A0 =A0# Define the toplevel wind=
ow
> =A0 =A0 =A0$frame->Show(1); =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0# Show the fra=
me
>
> =A0 =A0}
> =A0 =A0sub startimport {
> =A0 =A0 =A0 =A0 $x =3D 1;
> =A0 =A0 =A0 =A0 while( $x =3D=3D "1"){
> =A0 =A0 =A0 =A0 system "mv /home/steve/Desktop/INCOMING/* /home/steve/Des=
ktop/
> IMPORTED";
> =A0 =A0}
> =A0 =A0}
> =A0 =A0sub stopimport {
> =A0 =A0 =A0 =A0 =A0 =A0$x =3D 0;
> =A0 =A0}
> =A0 =A0###########################################################
> =A0 =A0#
> =A0 =A0# The main program
> =A0 =A0#
> =A0 =A0package main;
>
> =A0 =A0mkdir "/home/steve/Desktop/INCOMING";
> =A0 =A0system "touch /home/steve/Desktop/INCOMING/transmission1.txt";
> =A0 =A0system "touch /home/steve/Desktop/INCOMING/transmission2.txt";
> =A0 =A0system "touch /home/steve/Desktop/INCOMING/transmission3.txt";
> =A0 =A0system "touch /home/steve/Desktop/INCOMING/transmission4.txt";
> =A0 =A0mkdir "/home/steve/Desktop/IMPORTED";
> =A0 =A0my $wxobj =3D importsvc->new(); # New HelloWorld application
> =A0 =A0$wxobj->MainLoop;
I fixed it, I learned about the fork command to spawn a child process.
------------------------------
Date: Wed, 24 Feb 2010 12:54:09 -0600
From: Tad McClellan <tadmc@seesig.invalid>
Subject: Re: Need help with Wx and loops
Message-Id: <slrnhoat7h.hh0.tadmc@tadbox.sbcglobal.net>
Steve <steve@staticg.com> wrote:
> I'm just doing this for learning,
> I have 2 problems with my code: 1. strict doesn't like it,
See:
"Coping with Scoping":
http://perl.plover.com/FAQs/Namespaces.html
> strict doesn't like it because I can't seem to remember exactly how to
> declare a global variable.
A "package variable" in Perl is the closest to what most
people call a "global variable".
But you do not need a package variable, you just need a file-scoped
lexical variable. So, declare $x at the file level (ie. outside of
any subroutine).
> here is my code:
>
> #!/usr/bin/perl -w
> #use strict;
> use Wx;
>
> ###########################################################
> #
> # Define importsvc class that extends Wx::App
> #
> package importsvc;
> use base qw(Wx::App); # Inherit from Wx::App
> use Wx::Event qw(EVT_BUTTON);
> sub OnInit
> # Every application has its own OnInit method that will
> # be called when the constructor is called.
> {
> my $self = shift;
> my $frame = Wx::Frame->new( undef, # Parent window
> -1, # Window id
> 'Import Services', # Title
> [200,300], # position X, Y
> [250, 150] # size X, Y
> );
> my $panel = Wx::Panel->new($frame,-1); #create a panel in the
> parent window $frame
> my $start = Wx::Button->new($panel,1,"Start Import",[10,10]);
> my $stop = Wx::Button->new($panel,1,"Stop Import",[10,40]);
> EVT_BUTTON($start,$start,\&startimport);
> EVT_BUTTON($stop,$stop,\&stopimport);
> $self->SetTopWindow($frame); # Define the toplevel window
> $frame->Show(1); # Show the frame
>
> }
my $x; # this is all it takes to make strict happy
> sub startimport {
> $x = 1;
> while( $x == "1"){
That should be either
while( $x == 1 ) { # operator and operands are numbers
or
while( $x eq "1" ) { # operator and operands are strings
or
while( $x ) {
...and $x is a perfectly horrid name for your flag variable!
You should give variables *meaningful* names, like $importing or some such.
while ( $importing ) { # what the heck would "while x" mean?
> system "mv /home/steve/Desktop/INCOMING/* /home/steve/Desktop/
> IMPORTED";
> }
> }
> sub stopimport {
> $x = 0;
> }
--
Tad McClellan
email: perl -le "print scalar reverse qq/moc.liamg\100cm.j.dat/"
------------------------------
Date: Tue, 23 Feb 2010 22:42:19 -0800 (PST)
From: Francois Massion <massion@gmx.de>
Subject: open source spell checker for German
Message-Id: <76036dcd-c2d6-4c9b-a4aa-fae5e110bd45@k41g2000yqm.googlegroups.com>
Hi,
I am looking for a good open source spell checker with a German
dictionary which I can use to perform stemming operations on German
terms. Any suggestions?
Thanks.
Francois Massion
www.dog-gmbh.de
------------------------------
Date: Wed, 24 Feb 2010 00:41:09 -0800 (PST)
From: Robin <robin1@cnsp.com>
Subject: Re: perl advanced question
Message-Id: <368eb0c4-83d5-48dc-b91e-ff807f861bb7@j27g2000yqn.googlegroups.com>
Ben Morrow wrote:
> Quoth Robin <robin1@cnsp.com>:
> > Does anyone know how to start learning how to and or learn how to
> > start programming in perl a virus scanner or a firewall in perl?
>
> It would be extremely difficult to write a firewall in Perl. You need to
> get into the OS' network stack at a very low level, and that isn't easy
> in Perl. A virus scanner basically just looks for known patterns in
> files, but writing the scanner isn't the hard part: the hard part is
> working out which patterns match viruses.
>
> Ben
thanks for the suggestion.
-Robin
------------------------------
Date: Tue, 23 Feb 2010 18:38:14 -0800 (PST)
From: "C.DeRykus" <derykus@gmail.com>
Subject: Re: retrieve file after posting some data
Message-Id: <6b1a572e-1f02-4c39-a45d-3ebf9543d5d3@u19g2000prh.googlegroups.com>
On Feb 23, 1:51=A0pm, cerr <ron.egg...@gmail.com> wrote:
> On Feb 23, 9:25=A0am, Ben Morrow <b...@morrow.me.uk> wrote:
>
>
>
> > Quoth cerr <ron.egg...@gmail.com>:
>
> > > On Feb 22, 5:01=A0pm, Ben Morrow <b...@morrow.me.uk> wrote:
>
> > > > No, that's not right. I'm going to guess you used
>
> > > > =A0 =A0 warn "headers: $res->headers->as_string";
>
> > > > or something equivalent; that won't work since method calls aren't
> > > > interpolated. Try
>
> > > > =A0 =A0 warn "headers: " . $res->headers->as_string;
>
> > > Oh Yeah, that looks different:
> > > headers: Connection:
> > > close
> > > Date: Wed, 04 Jan 2006 21:19:34
> > > GMT
> > > Server:
> > > Apache
> > > Content-Type: text/html; charset=3DISO-8859-1
> > > Client-Date: Tue, 23 Feb 2010 16:26:55 GMT
> > > Client-Peer: 192.168.167.166:443
> > > Client-Response-Num: 1
> > > Client-SSL-Cert-Issuer: /C=3DUS/ST=3DCalifornia/L=3DSunnyvale/O=3DTro=
pos
> > > Networks/OU=3DManufacturing/CN=3DTropos Router/
> > > emailAddress=3Dsupp...@tropos.com
> > > Client-SSL-Cert-Subject: /C=3DUS/ST=3DCalifornia/L=3DSunnyvale/O=3DTr=
opos
> > > Networks/OU=3DManufacturing/CN=3DTropos Router/
> > > emailAddress=3Dsupp...@tropos.com
> > > Client-SSL-Cipher: EDH-RSA-DES-CBC3-SHA
> > > Client-SSL-Warning: Peer certificate not verified
> > > Client-Transfer-Encoding: chunked
> > > Link: <mailto:peter.sugiarto%40troposnetworks.com>; rev=3D"made"
> > > Title: Configuration Utility: INDOOR ROUTER
> > > res->message: 200->code
>
> > > But this doesn't really tell me anything either, does it?
>
> > It says the the server is *not* returning the configuration file at all=
,
> > but it sending back the same HTML form you started with.
>
> > I'm going to take a wild guess and suggest that maybe the server
> > requires you to accept cookies properly. Try using WWW::Mechanize (with
> > a properly-configured cookie store) to run through the whole
> > login/download process.
>
> > > > What sort of 'filename' are you expecting?
>
> > > Well I expected to see the filename that the browser would be
> > > downloanding, that would be 'tropos.cfg'.
>
> > OK. If you install the LiveHTTPHeaders FF extension, you should see tha=
t
> > when you perform a successful download the server sends a
> > Content-Disposition header. HTTP::Response->filename will pick this up,
> > if it's there.
>
> Ah, hold on, with this extension I figured out that the correct post
> string is:'export_profile=3DCurrent+Profile&save=3DExport' and with that =
i
> see binary data coming back in $res->content - now i just wrote this
> in a binary file and it seems to work.
>
off-topic but IMO the server should have returned a 400 'Bad Request'
if there's a missing query parameter. Even though covering a wide
range of possible error conditions, there's a clear signal that
the server encountered a problem.
--
Charles DeRykus
------------------------------
Date: Wed, 24 Feb 2010 07:00:23 -0800 (PST)
From: Steve <steve@staticg.com>
Subject: Re: use strict...
Message-Id: <63506b2a-6fd6-453e-9eee-cff76947cc13@m37g2000yqf.googlegroups.com>
On Feb 15, 7:06=A0pm, Robin <rob...@cnsp.com> wrote:
> I know this is a pretty stupid question, maybe, but is it better to
> use strict? I have never gotten a concise answer to this question
> because there reallty isn't any docs on it.
> thanks,
> -ro9bin
I've been reading the oreilly book on perl and it says to always use
warnings and strict. It can be a bit frustrating sometimes though.
Like when your program will compile without using strict and won't
when you use it :P. But that's what it's there for! To make sure you
do things right!
------------------------------
Date: Wed, 24 Feb 2010 09:43:03 -0600
From: Tad McClellan <tadmc@seesig.invalid>
Subject: Re: use strict...
Message-Id: <slrnhoai17.h0a.tadmc@tadbox.sbcglobal.net>
Steve <steve@staticg.com> wrote:
> I've been reading the oreilly book on perl
^^^
^^^
There are *dozens* of oreilly books on Perl.
There might even be one or more on perl.
--
Tad McClellan
email: perl -le "print scalar reverse qq/moc.liamg\100cm.j.dat/"
------------------------------
Date: Tue, 23 Feb 2010 18:35:56 -0800
From: sln@netherlands.com
Subject: Re: Windows: How to sleep until key is pressed
Message-Id: <ql39o5hgbf2d61f79e16ensre6cpl77til@4ax.com>
On Tue, 23 Feb 2010 22:09:47 +0000, Ben Morrow <ben@morrow.me.uk> wrote:
>> do {
>> @event = $CONS_INP->Input() if $CONS_INP->GetEvents();
>> } until @event;
>
>AFAICT from the MSDN docs, ->Input should block until there is something
>to read. That is, replace the whole do/until loop with
>
> my @event = $CONS_INP->Input();
>
That could probably be tested with a print statement
and fingers on Ctrl-C.
do {
@event = $CONS_INP->Input() if $CONS_INP->GetEvents();
print ".";
} until @event;
I wouldn't know why if $CONS_INP->GetEvents() would be needed
unless he is managing his own queue, otherwise the perl thread
running this program would be blocked. And you can PeekMessage
I guess.
-sln
------------------------------
Date: Tue, 23 Feb 2010 18:45:33 -0800
From: sln@netherlands.com
Subject: Re: Windows: How to sleep until key is pressed
Message-Id: <r449o5h6ndrnt2svrr6i934umb8au7v4st@4ax.com>
On Tue, 23 Feb 2010 22:24:53 +0000, Ben Morrow <ben@morrow.me.uk> wrote:
>
>Quoth "Peter J. Holzer" <hjp-usenet2@hjp.at>:
>> On 2010-02-23 20:49, Tad McClellan <tadmc@seesig.invalid> wrote:
>> > Dilbert <dilbert1999@gmail.com> wrote:
>> >> Is there an advanced sleep command for Windows that sleeps for 1
>> >> second *maximum* ?, i.e. if any key was hit during the sleep
>> >
>> > I don't think you understand the definition of "sleep" here...
>> >
>> > "sleep" means "do not do _anything_".
>> >
>> > Monitoring the keyboard is "something", so it cannot be done while sleeping.
>> >
>> > That is, if it could notice that something happened on the keyboard,
>> > then it was not truly sleeping.
>>
>> If it could notice that time has passed, then it was not truly sleeping
>> ;-)
>>
>> "Sleeping" means that the process has told the OS to suspend it until a
>> given amount of time has passed or until the process needs to be resumed
>> (or terminated) for another reason.
>>
>> There is in fact one Unix system call (and corresponding Perl builtin
>> function) which has exactly the semantics Dilbert wants:
>>
>> select
>
>Unfortunately select doesn't generally work on Win32, since it doesn't
>have a proper unified fd model. The perl builtin calls a version that
>only works on sockets.
>
>The native Win32 replacement for select(2) is WaitForMultipleObjects,
>which will wait for any HANDLE. This is wrapped by the Win32::IPC
>module.
>
>Arguably perl's select on Win32 ought to use WFMO to provide semantics
>more like Unix' select(2), but it doesn't.
>
>Ben
Probably in its simplest form all thats necessary is this:
#include <Windows.h>
#include <Winbase.h>
#include <Wincon.h>
HANDLE hStdin;
DWORD ret;
if (hStdin = GetStdHandle( STD_INPUT_HANDLE ))
{
while (1)
{
// Wait for state of a console input buffer handle to be signaled
ret = WaitForSingleObject( hStdin, INFINITE );
switch (ret)
{
// process low level buffer events
case WAIT_OBJECT_0:
if ( ReadConsoleInput( hStdin, ...) ) {
switch() {
...
}
}
else {
ExitError( "ReadConsole" );
}
break;
// Not waiting for timeouts
default:
ExitError( "WaitForSingleObject" );
break;
}
}
ExitError( "GetStdHandle" );
I'm sure Win32::IPC has the WFSO but can it get the
console handle via either CreateFile(..CONIN$..) or
GetStdHandle(STD_INPUT_HANDLE)? Then a module has to
do a low level input buffer read. Maybe thats what
the Win32::Console does and could do the async waiting
as well because I would think the module wouldn't just
be doing busy waiting (polling).
-sln
------------------------------
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:
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
Back issues are available via anonymous ftp from
ftp://cil-www.oce.orst.edu/pub/perl/old-digests.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 2833
***************************************