On Mon, Jan 21, 2002 at 12:50:38PM -0800, Larry Wall wrote: > In most other languages, you wouldn't even have the opportunity to put > a declaration into the conditional. You'd have to say something like: > > my $line = <$in>; > if $line ne "" { ... } > > Since > > if my $line = <$in> { ... } > > is Perl shorthand for those two lines, I don't see how one can say that > the variable is more related to the inside than the outside of the block. > One can claim that the code after the C<if> may not be interested in > C<$line>, but the same is true of the block itself! The conditional > only decides whether the block runs. It's not part of the block. > > Larry
Particularly in perl, boolean values are often very interesting. I very much like the "curly brackets are the only things that delimit scopes within a file, dammit" rule, but I also like to use very localized conditionals: if (my $result = expensive_computation()) { ...do stuff with $result... } if (my $result = expensive_computation2()) { ... } func($result); I would like for there to be a way of saying that so that the func($result) would trigger an error about using an unknown variable. (I do *not* want the above syntax to be that way, though.) Perhaps: if (expensive_computation()) { my $result = __HOW_DID_I_GET_HERE__; ...do stuff with $result... } I'm just not just how to spell __HOW_DID_I_GET_HERE__. - $LAST, for the value of the last executed expression? - $__? (ick) - Say, isn't $? going away, because it's getting absorbed by $! I rather like that last one. if (expensive_computation()) { my $result = $?; ...do stuff with $result... } In fact, it seems clear enough that renaming is only necessary if you have nested conditionals. while (read(FH, $buf, 10)) { print "Not EOF yet, received $? bytes\n"; } Though I don't know if foo() && print "Yeah baby"; should set it or not. I'd vote not.