There is a full implementation of try-catch block using perl filters:
Nice::Try
So you can do something like embedded try-catch block, return, variable assignments, catching class exception, etc. There is no need for semicolon on the lack brace.
use Nice::Try;
try
{
# do something
die( "Argh...\n" );
}
catch( $wow )
{
return( $self->error( "Caught an error: $wow" ) );
}
finally
{
# do some cleanup
}
Full disclosure: I am the author of this module that I created when Devel::Declare on which TryCatch was relying became obsolete.