It's not clear to me what you really wanted.
When in trouble with perlop precedence always use parentheses.
The 1. variant
> return something() or croak "something didn't work";
equals
(
( return something() )
or
( croak "something didn't work" )
);
But doesn't make much sense, because the or-branch is never reached.
A "normal" return almost never fails, and if return fails, the program dies right away:
> perl
return
__END__
Can't return outside a subroutine at - line 2.
(update: one might argue that the former shouldn't even compile, but there are probably use-cases in combination with do FILE )
The 2. variant
> return something() || croak "something didn't work";
equals
return (
( something() )
or
( croak "something didn't work" )
);
which looks a bit strange but is somehow possible.
still Carp::croak() means to die
# die of errors (from perspective of caller)
croak "We're outta here!";
so returning the value of croak doesn't really make sense either.
update
The latter means mixing two very different control flows in one line ... irk.
In the spirit of PBP : "make control flows immediately clear!", mixing two is quite confusing for the reader.
|