use feature 'try';
try {
do_a_thing();
}
catch ( $e ) {
warn "It failed - $e";
}
####
use feature 'try';
try {
do_a_thing();
}
catch( $e ) { ... }
finally {
cleanup();
}
##
##
use strict;
use warnings;
sub fred {
my $fname = 'f.tmp';
open( FH, '<', $fname ) or die "error: open '$fname': $!";
print "file '$fname' opened ok\n";
# ... process file here
die "oops"; # if something went wrong
close(FH);
}
my $ok = eval { fred(); 1 }; # see [id://11130946]
if (!$ok) { print "died: $@\n" }
# oops, handle FH is still open if an exception was thrown.
my $line = ;
print "oops, FH is still open:$line\n";
##
##
use strict;
use warnings;
sub fred {
my $fname = 'f.tmp';
open( my $fh, '<', $fname ) or die "error: open '$fname': $!";
print "file '$fname' opened ok\n";
# ... process file here
die "oops"; # if something went wrong
close($fh);
}
my $ok = eval { fred(); 1 }; # see [id://11130946]
if (!$ok) { print "died: $@\n" }
print "ok, \$fh is auto-closed when sub fred exits (normally or via die)\n";