http://qs1969.pair.com?node_id=501957


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

If the last thing that happened was an iteration of the do {} while $cond or do {} until $cond pseudo-loop, you get back a code reference (whether the condition turned out true of false).

That sounds really strange, but sadly I can't reproduce it. I tried

perl -e 'print sub {my $x=5; do {print "."} while $x--}->()'
but the sub just seems to return 0. Can you give an example? (Also, what version of Perl are you using?)

Replies are listed 'Best First'.
Re^3: "last expression" quiz
by Aristotle (Chancellor) on Oct 23, 2005 at 14:43 UTC

    As the node you’re replying to already says: check Re^8: Unhappy returns for code.

    $ perl -v
    
    This is perl, v5.8.7 built for i486-linux

    Makeshifts last the longest.

      There is a bug in your code. You've missed out the ->() in the last two cases, so it's printing the sub rather than the result of calling the sub.

        Gack. Thanks for the catch. That was stupid. Fixed, node has been updated.

        The new behaviour is a tad more consistent, but still not consistent with the documentation. What gets returned is the last expression from the body of the do, while the last one evaluated is clearly the while/until condition. (Arguably, the real behaviour is more useful than the strictly doc-adherent one would be.)

        Makeshifts last the longest.