2017-06-01 8 views
1

サーバーにアクセスしてその名前を取得しようとしていますが、使用できません。エラーを処理してスクリプトの残りの部分を続行するにはどうすればいいですか?qx($srvername)エラー私はあなたがそれを使用したい場合はevalブロックの外側で$opt変数を宣言する必要が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は))の状態を示します。すべてがうまくいけば、ゼロになるはずです。 [in perlvar]を読む(http://perldoc.perl.org/perlvar.html#Error-Variables) – zdim

答えて

1

を終了します。またブロックの外側でnextを実行する必要があります。

私はあなたのコードの周りにたくさんのものを変更しました。

今度は$opt$srvernameevalの外に宣言します。可能であればevalの範囲を狭める方が良いでしょう。文字列の作成は失敗しません。

それからevalqx()内部を呼び出し、foreachブロック内スコープれる$optを割り当てます。後でそれにアクセスすることができます。

qxが失敗すると、dieevalブロックから抜け出します。 qxが投げたエラーを気にするなら、$?を投げることができます。

evalの後、私たちは[email protected]をチェックし、評価エラーを保持します。そこに何かがある場合は(おそらく、$?からqxまで)、私たちはnextの繰り返しに行きます。私も$node$aに改名

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$bとともにsort用に予約されています。変数を自分自身のために意味のある名前にすることも良い考えです。

関連する問題