in reply to "return" to break out of a loop

I use this kind of stuff quite a bit. Of course it can get confusing if your subs are large, but subs should not be large anyway.

Also compare the relatively simple

sub direct_return { my ($enum,$check_type,$enums) = @_; foreach my $enum (@$enums) { return 1 if ( $check_type eq $enum); } return; }
to the mess you get when you start to believe that there should be only one return in a sub:
sub otherwise { my ($enum,$check_type,$enums) = @_; my $flag = 0; LOOP: foreach my $enum (@$enums) { if ( $check_type eq $enum) { $flag = 1; last LOOP; # not really needed unless you've got nested loops } } return $flag ? $flag : wantarray ? () : undef; }