: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!"