On Thu, Sep 30, 2004 at 11:26:27AM -0500, Errin Larsen wrote:

> When I run your command line up there, I get the following:
> 
> # perl -MO=Deparse -l00pe's/\n/\t/;s/\"//g'
> LINE: while (defined($_ = <ARGV>)) {
>     chomp $_;
>     s/\n/\t/;
>     s/"//g;
> }
> continue {
>     print $_;
> }
> -e syntax OK
> 
> What OS are you running?  My '-MO=Deparse' didn't create that BEGIN
> Block.  I'm on Solaris, using Perl 5.6.1.  I'm just curious what the
> difference is.

That was on linux, but the important thing here is the perl version.
5.6.1 is old, and if you are looking at the B modules (which Deparse is)
it's very old.  There have been many improvements (bug fixes) since
then.

> --Errin
> 
> BTW, I didn't know about the Deparse Pre-Compiler thing!  Thanks for
> pointing it out.  It's very handy.  Why do you think Perl uses:
> 
>   while( defined( $_ = <ARGV> ) )
> 
> instead of:
>   
>   while( <> )
> 
> Is this example pointing out that the diamond ( <> ) operator is
> really a short-cut for 'defined( $_ = <ARGV> )' ?

Yes, exactly that.

>                                                    I'll have to go
> read about this.  What is Perl protecting against by putting that
> assignment in a defined()?

It's protecting against input which evaluates to false, such as the last
line of a file which contains only 0 and no newline, for example.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to