use strict; use warnings; use Contextual::Return; use Carp; while (foo()) { last; } while (my $x = foo()) { last; } if (foo()) { } if (my $z = foo()) { } sub foo { return BOOL { carp "BOOL"; 1; } SCALAR { carp "SCALAR"; 1; } ; } __END__ BOOL at ./cr line 6 BOOL at ./cr line 7 BOOL at ./cr line 8 BOOL at ./cr line 9