in reply to Re^2: 'return:' instead of 'return'
in thread 'return:' instead of 'return'

BTW, is 'return 3;' a statement? If so, is it then a special exception to the rule 'blocks return the value of the last statement executed', or is the value of 'return 3' equal to 3 ?

No exception. That's indeed what a block returns, and the same goes for subs. They return the the value of the last statement executed.

sub foo { if (0) { # <- Last statement executed 1 } } # Foo returned 0.
sub foo { if (2) { 3 # <- Last statement executed } } # Foo returned 3.
sub foo { return 4; # <- Last statement executed 5 } # Foo returned 4.