我正在尝试访问服务器并获取其名称,但它不可用我如何处理错误并继续执行脚本的其余部分。如果此命令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";
}
答案 0 :(得分:1)
如果要使用$opt
块,则需要在eval
块之外声明next
变量。您还需要在eval
块之外执行$opt
。
我改变了你的代码周围的一堆东西。
我们现在在$srvername
之外声明eval
和eval
。最好将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"
。为变量提供有意义的名称也是一个好主意。