Lio*_*uru 2 perl eval catalyst dbix-class
我试图在一个eval块下放置一些DBIX事务来进行所有事务,如果中间出现问题则不进行.
我有几个交易正在这样做,没有一个给我带来问题.只有一个:
我构建交易的方式相当棘手,而且值得的是,这些实际上是有效的.如果你愿意,我可以发布那段代码,但也许eval块就足够了:
eval {
for (my $sub = 0; $sub < $neuroexam_index; $sub++){
$transactions{neuroexams}{$sub}->insert;
}
} or die $!;
Run Code Online (Sandbox Code Playgroud)
问题是eval [error] Caught exception in pbitdb::Controller::Subjects->add "Died at /home/lioneluranl/svn/pbitdb/pbitdb/script/../lib/pbitdb/Controller/Subjects.pm line 411."在我的控制台中显示错误(),但实际上执行插入.那为什么会这样?
eval {
for (my $sub = 0; $sub < $neuroexam_index; $sub++){
$transactions{neuroexams}{$sub}->insert;
}
1; # No exception.
}
or do {
# ... Perform rollback here ...
die("[error] Caught exception in pbitdb::Controller::Subjects->add: $@");
};
Run Code Online (Sandbox Code Playgroud)
要么
if (!eval {
for (my $sub = 0; $sub < $neuroexam_index; $sub++){
$transactions{neuroexams}{$sub}->insert;
}
1; # No exception.
}) {
# ... Perform rollback here ...
die("[error] Caught exception in pbitdb::Controller::Subjects->add: $@");
}
Run Code Online (Sandbox Code Playgroud)
三个变化:
1;添加以确保在没有异常时返回真值,以确保or未评估RHS .$@,而不是$!.($!映射到errnoC库调用和系统调用设置的错误代码.)| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |