无法获取错误并检查它是否存在

Unable to get the error and check if it exist

我正在尝试访问服务器并获取其名称,但它不可用我该如何处理错误并继续 script.If 此命令的其余部分 qx($srvername) returns 一个错误,我想退出 for 循环

my @s =qw(v200 pm363   wq280 );
foreach $a (@s){

  eval {
  my $srvername="wmic /node: '$a' computersystem get Name";
  my $opt = qx($srvername) ;

  if($!){ 
     next;
  }
 };


print "here$a\n";   
}

如果要使用 $opt 变量,需要在 eval 块之外声明它。您还需要在 eval 块之外执行 next

我已经围绕您的代码更改了很多东西。

我们现在在 eval 之外声明 $opt$srvername。最好将 eval 的范围尽可能小,并且创建字符串不会失败。

然后我们在 eval 内调用 qx(),并分配 $opt,它在 foreach 块内。这样您以后就可以访问它了。

如果 qx 失败,我们 die,它会跳出 eval 块。如果你关心 qx 抛出的错误,你可以抛出 $?

eval 之后,我们检查 $@,其中包含评估错误。如果里面有东西(可能是 qx 中的 $?),我们将转到 next 迭代。

my @s = qw( v200 pm363 wq280 );
foreach my $node ( @s ){
  my $opt;
  my $srvername = "wmic /node: '$node' computersystem get Name";

  eval {
    $opt = qx($srvername) or die $?;
  };

  next if $@;

  print "$node - opt\n";   
}

请注意,我还将 $a 重命名为 $node。变量名称 $a$b 一起为 sort 保留。给你的变量起有意义的名字也是个好主意。