在 Perl 中继续而不是 'or die'
Continue instead of 'or die' in Perl
我的 Perl 脚本中有一个循环,它准备并执行 SQL 语句,如下所示:
my $sql_1 = select * from TABLE;
my $sth_1 = $database->prepare($sql_1) or die "Failed to prepare SQL";
$sth_1->execute() or die "Failed to execute SQL";
my $results = sth_1-> fetchall_arrayref({});
my params_ins;
my params_del;
foreach my $row($results) {
params_ins = $row->{params_ins}
params_del = $row->{params_del}
my $sql_2 =
begin transaction
exec delete_sp(params_ins)
exec insert_sp(params_del)
end transaction
my $sth_2 = $database->prepare($sql_2) or die "Failed to prepare SQL";
$sth_2->execute();
}
据我了解,die 会导致代码执行停止。是否可以继续下一个循环而不是停止整个脚本的执行?例如,是否可以这样做:
my $sth_2 = $database->prepare($sql_2) or continue;
$sth_2->execute();
'or next'可以吗?
您可以试试next
功能。 https://perldoc.perl.org/functions/next.html
您可以将 die
替换为 warn
。 die
输出错误信息并退出脚本; warn
输出一条错误消息并且不退出脚本。
my $sth = $database->prepare($sql) or warn "Failed to prepare SQL";
$sth->execute() or warn "Failed to execute SQL";
C 的等价物 continue
在 Perl 中称为 next
。
my $sth_2 = $database->prepare($sql_2)
or do {
warn("Failed to prepare SQL");
next;
};
只需在此处添加一个额外的解决方案,您可以使用 try-catch 块(在 perl 中称为 eval)。
eval {
my $sth_2 = $database->prepare($sql_2) or die "Failed to prepare SQL $DBI::errstr";
$sth_2->execute();
};
if($@) {
warn "Error executing $sql2 => $@";
next;
}
我的 Perl 脚本中有一个循环,它准备并执行 SQL 语句,如下所示:
my $sql_1 = select * from TABLE;
my $sth_1 = $database->prepare($sql_1) or die "Failed to prepare SQL";
$sth_1->execute() or die "Failed to execute SQL";
my $results = sth_1-> fetchall_arrayref({});
my params_ins;
my params_del;
foreach my $row($results) {
params_ins = $row->{params_ins}
params_del = $row->{params_del}
my $sql_2 =
begin transaction
exec delete_sp(params_ins)
exec insert_sp(params_del)
end transaction
my $sth_2 = $database->prepare($sql_2) or die "Failed to prepare SQL";
$sth_2->execute();
}
据我了解,die 会导致代码执行停止。是否可以继续下一个循环而不是停止整个脚本的执行?例如,是否可以这样做:
my $sth_2 = $database->prepare($sql_2) or continue;
$sth_2->execute();
'or next'可以吗?
您可以试试next
功能。 https://perldoc.perl.org/functions/next.html
您可以将 die
替换为 warn
。 die
输出错误信息并退出脚本; warn
输出一条错误消息并且不退出脚本。
my $sth = $database->prepare($sql) or warn "Failed to prepare SQL";
$sth->execute() or warn "Failed to execute SQL";
C 的等价物 continue
在 Perl 中称为 next
。
my $sth_2 = $database->prepare($sql_2)
or do {
warn("Failed to prepare SQL");
next;
};
只需在此处添加一个额外的解决方案,您可以使用 try-catch 块(在 perl 中称为 eval)。
eval {
my $sth_2 = $database->prepare($sql_2) or die "Failed to prepare SQL $DBI::errstr";
$sth_2->execute();
};
if($@) {
warn "Error executing $sql2 => $@";
next;
}