Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 继续而不是Perl中的“或死”_Loops_Perl_Syntax_Continue_Die - Fatal编程技术网

Loops 继续而不是Perl中的“或死”

Loops 继续而不是Perl中的“或死”,loops,perl,syntax,continue,die,Loops,Perl,Syntax,Continue,Die,我的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

我的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(); 
“或下一个”是否有效?

您可以尝试下一个功能

您可以使用warn替换模具。die输出错误消息并退出脚本;warn输出错误消息,不退出脚本

my $sth = $database->prepare($sql) or warn "Failed to prepare SQL";
$sth->execute() or warn "Failed to execute SQL";
在Perl中,相当于C的has continue被称为next


只需在这里添加一个额外的解决方案,就可以在perl中使用名为eval的try-catch块

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;
}

请向我们展示实现循环的代码部分。~~~~my$sql\u 1=select*from TABLE;我的$sth\u 1=$database->prepare$sql\u 1或die无法准备sql$sth_1->执行或死亡无法执行SQL;我的$results=sth\u 1->fetchall\u arrayref{};我的爱人;我的情人;foreach my$row$results{params_ins=$row->{params_ins}params_del=$row->{params_del}my$sql_2=开始事务执行删除参数执行插入参数结束事务我的$sth_2=$database->prepare$sql_2或die未能准备sql;$sth_2->执行;}~~请直接将信息放入您的问题中,使用@GMB,我注意到了小小的编辑按钮哈哈。编辑了我原来的帖子。如果可以,请帮助。你的意思是我可以用或next替换或死亡?如果prepare调用->在未定义的值上执行失败,这将杀死程序。
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;
}