On Jan 13, 2008 6:22 AM, Peter Daum <[EMAIL PROTECTED]> wrote: snip > my $t =$x if $x; snip > $t would be initialized with the value of $x if that was true; > otherwise (at least that's what I would expect) $t should be undefined, > so the result would be as before. The real outcome, however, is: > > $t == undef > $t == a > $t == b > > $t now retains its value from the last loop iteration. > Is this a bug or a feature (tm)? > If it is a feature, then why isn't the value also retained in the 1st example? snip
People argue about whether this is a bug or not*. In my opinion, it is a bug because the variable's scope should be within the if statement. You wouldn't expect to be able the use the variable if the code looked like this if ($x) { my $t = $x; } print "$t\n"; so why should you be able to use it because it has been changed to this my $t = $x if $x; print "$t\n"; The proper way to get static variables prior to Perl 5.10 is { my $counter; sub inc { return $counter++; } } With Perl 5.10 we can use state** instead of my: sub inc { state $counter; return $counter++; } * http://www.perlmonks.org/?node_id=95940 ** http://perldoc.perl.org/functions/state.html -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/