[Melbourne-pm] Pls explain?
mathew.robertson at netratings.com.au
Tue Oct 23 17:44:42 PDT 2007
>> #<<<<<<<<< CUT HERE >>>>>>>>>>>>
>> #!/usr/bin/perl -w
>> use strict;
>> use warnings;
>> sub get_name_1
>> my ( $n, $backfill ) = @_;
>> my $job_name = "backfill_" if $backfill;
> This line above is like writing:
> my $a if $b;
> So the lexical variable $a only springs into existence if $b is true. Therefore
> (since $backfill isn't true)
why is it the same?
The "my $job_name" should be an isolated statement due to the "="
operator, ie: an lvalue is being created.
Thus "my $a if $b" doesn't have a lvalue until the "if" is true.
>> $job_name .= "migrate_$n";
> this must be the global $job_name; hence the behaviour you see. There is a
> (lame) excuse for why you don't get strict errors and warnings, but I don't
> remember what it is, and personally I think it's a bug.
In any case $job_name would be undef on the first iteration, whether it
was global or local scoped. I'd be interested to know why a warning
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Melbourne-pm