in reply to eval and return values

First, remove the "my" inside the eval block, otherwise it won't do what you think it does.

To me, as written, it's equivalent to:

return bar->something();

That's pretty succinct :)

What is it that you really want to do? Log the error before rethrowing it?

Having said that, this is a slightly more succinct way:

my $foo = eval { bar->something() }; die if $@; # See "perldoc -f die" for what this does
But note that if you call a method in between the eval and checking $@, any eval potentially called inside the method will reset $@ for you, so you need to capture the value of $@ immediately.

Also note that other things may potentially mess up $@ for you (if an eval was used in a DESTROY block which was triggered by the exception). This is normally not a problem, but when something in your code changes and it becomes a problem it will confuse you for a bit because of the action at a distance.

So overall it's better to make sure the eval returns a true value, and check for that. If an exception is thrown, eval returns undef (perldoc -f eval).

/J