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

问题描述:

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

'$?'([$ CHILD_ERROR](http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR))给出了状态。如果一切顺利,它应该是零。阅读[在perlvar](http://perldoc.perl.org/perlvar.html#Error-Variables) – zdim

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

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

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

我们随后致电qx()eval的,并分配$opt,这是foreach块内部作用域。这样你可以在之后访问它。

如果qx失败,我们die,它突破eval块。如果您关心qx投掷的错误,则可以投掷$?

eval之后我们检查了[email protected],这个保存了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 [email protected]; 

    print "$node - opt\n"; 
} 

请注意,我也改名为$a$node。变量名称$a$b一起保留用于sort。给变量赋予有意义的名称也是一个好主意。