in reply to Re^2: "last expression" quiz
in thread "last expression" quiz

Does anybody disagree with that conclusion?

I certainly don't. An even better example:

sub foo { 1 for 1 }
Now there's only one expression which always evaluates to the same thing, 1, and yet the sub unintuitively returns !1. Certainly a patch is needed. Whether it should just be a doc patch to perlsub or different behavior should be forced, I don't know.

-sauoq
"My two cents aren't worth a dime.";

Replies are listed 'Best First'.
Re^4: "last expression" quiz
by halley (Prior) on Oct 20, 2005 at 14:08 UTC
    Okay, I figured it was some peephole optimization thing. This is not what I would have predicted for deparse output, but it kind of makes sense.
    $ perl -MO=Deparse -e 'sub foo { 1 for 1 } foo' sub foo { foreach $_ (1) { '???'; } } foo ; -e syntax OK
    The '???' appears for other constants, with which it would generate "useless use of constant in void context" warnings. This warning is suppressed for a few common constants. So I guess the opcode optimizer just forgets WHAT constant was there.

    --
    [ e d @ h a l l e y . c c ]