无法获取错误并检查它是否存在
问题描述:
我正在尝试访问服务器并获取它的名称,但它不可用如何处理错误并继续执行其余脚本。如果此命令返回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";
}
答
,如果你想使用它,你需要声明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
。给变量赋予有意义的名称也是一个好主意。
'$?'([$ CHILD_ERROR](http://perldoc.perl.org/perlvar.html#%24CHILD_ERROR))给出了状态。如果一切顺利,它应该是零。阅读[在perlvar](http://perldoc.perl.org/perlvar.html#Error-Variables) – zdim