> > > I can also think of some advantages to having the "else" within the
> > > scope of the loop.
> >
> > while alllines("/etc/passwd") -> $_ {
> > ...
> > } else {
> > die "/etc/passwd: $_";
> > }
>
> But the aliased value, $_, is restricted to the scope of the C<while>'s
> block, it isn't going to be accessible in the block associated with the
> C<else> (you would be getting some $_ from an outer scope).
This is the only major reason not to adopt a 'else' on loops, imo.
Two solutions to the problem of accessing 'what' returned false are:
1) don't allow it.
2) Alias the value of the while/loop/if conditional into a special
variable.
while( blah() ) {
..
} else { print $COND; }
It's ugly, but it works, and doesn't break the holy scoping rules. And
given how little you're going to want to know what kind of false value as
returned, I don't think it's that bad. Someone might want to come up with
a better variable name, however.
Just trying to contribute something new to the discussion that hasn't been
mentioned a dozen times already... :)
Mike Lambert