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

时间:2017-06-01 07:01:48

标签: perl wmic

我正在尝试访问服务器并获取其名称,但它不可用我如何处理错误并继续执行脚本的其余部分。如果此命令qx($srvername)返回错误,我想退出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";   
}

1 个答案:

答案 0 :(得分:1)

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

我改变了你的代码周围的一堆东西。

我们现在在$srvername之外声明evaleval。最好将qx()的范围尽可能小,创建字符串不会失败。

然后,我们调用eval内的$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。变量名称sort$b一起保留用于a = "Argyle Extension Tube 20\"" b = "MISC" 。为变量提供有意义的名称也是一个好主意。