in reply to What about if (my $var = foo()) { ... }
I think you have eaten too much Christmas pudding :) You seem to be thinking the following constructs are equivalent:
These constructs are hardly equivalent and there is no ambiguity that needs to be cleaned up, regardless of whether they happen to appear within a conditional.
A lexical declared within an if is not prone to the my $foo if 0 persistency problem, period. Consider the construct
if (my $result = some_func())assuming some_func() is some sort of cyclic iterator that returns a positive number, then 0, then undef, the if branch will be taken only when $result contains a positive number. If $result contains 0 or undef, the conditional will evaluate to false, and the else branch (if any) will be taken instead.
At no point will $result retain its previous contents. Even if it did at a purely implementational level, you're initialising it with a value via the assignment of the results of some_funct(), and so you're safe.
• another intruder with the mooring in the heart of the Perl
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: What about if (my $var = foo()) { ... }
by Limbic~Region (Chancellor) on Dec 29, 2007 at 16:12 UTC | |
by Cyrnus (Monk) on Dec 29, 2007 at 16:24 UTC |