我无法理解,为什么Perl在像这样的程序中执行大括号中的代码:
unknown_method {
# some code
};
Run Code Online (Sandbox Code Playgroud)
我的节目:
文件Transaction.pm:
package Transaction;
use strict;
use warnings;
use feature qw/ say /;
sub transaction(&) {
say 'BEGIN TRANSACTION';
eval {
shift->()
};
if ( $@ ) {
say 'ROLLBACK TRANSACTION';
die($@); # reraise error
} else {
say 'COMMIT TRANSACTION';
}
}
1;
Run Code Online (Sandbox Code Playgroud)
文件run_properly.pl:
use feature qw/ say /;
use Transaction;
eval {
Transaction::transaction {
say "insert some data to DB";
die("KnownException")
}
};
warn $@;
Run Code Online (Sandbox Code Playgroud)
文件run_wrong.pl:
use feature qw/ say /; …Run Code Online (Sandbox Code Playgroud)