in reply to Re^2: exit this way
in thread exit this way

Hi, Your Mother. Can you please explain this snippet? It does print out the randomly assigned value of $success if I change it to:

exit ! main(); sub main { $success = [ undef, "true" ]->[rand 2]; print "$success\n" +}
But it appears to produce the same output when I omit the !:
exit main(); sub main { $success = [ undef, "true" ]->[rand 2]; print "$success\n" +}
Which appears to be the same code as The Vague One posted ...

What is the function of the bang?

The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^4: exit this way
by Your Mother (Archbishop) on Sep 01, 2015 at 15:45 UTC

    :P The last expression of a sub/block/package is its return value; when there is no explicit return. So that little snippet just rotates returning "true" and "false" randomly; idiom: return 0 or 1 element of anon array with 2 elements, one true, one false. By adding a print you made the sub always return "true."

    exit values are approximately opposed to return/success values in most Perl. The bang (!) performs this inversion. exit == 0 means success, any other value (-1, 1 .. 255) means some flavor of fail (on *nix anyway). Why I suggest it is cognitively a bad idea for a Perl script. To test the original, try these instead (with 1140673.pl being the first scriptlet I posted)-

    moo@cow~>1140673.pl && echo "I CAN HAZ SUCCEED?" moo@cow~>1140673.pl || echo "FAIL!"

      OK, I see. Ugh, the Vague One obfuscated my thoughts ... I was focusing on whether the sub would be executed when called as the argument to exit(), rather than what that would make the output of the script via exit(). Thanks.

      The way forward always starts with a minimal test.