ここでPerlを使い始めたところです。私は以前、バックティックを使用して、次のようなシステムコマンド出力をPerlでキャプチャすることに成功しました。
my @sysOut = `cleartool checkout -nc "$file"`; # works fine!
しかし、問題が発生し、しばらく見てもこの問題の解決策が見つかりませんでした。チェックアウトされたファイルのリストをチェックインするPerlスクリプトを作成しようとしています。 (@allfiles)
cleartoolを使用します。ただし、前のバージョンと同じものがある場合を除き、チェックアウトを解除します。
私が(...失敗している!)それらが同一であるかどうかを検出する方法は、チェックインの試行から出力を取得し、それが一致するかどうかを確認することです。 /error.*identical/i
、その場合はファイルのチェックアウトを解除します。ただし、何らかの理由で、出力は、渡した配列をバイパスしているように見えます。
この問題を引き起こすコードを参照してください。
foreach my $file (@allfiles){
chomp( my @checkInErr = `cleartool checkin -nc "$file"`);
foreach my $err (@checkInErr) { # if no error, checkin done
if ($err =~ m/error.*identical/i) { # if there is error:
print $err;
print "No change detected: unchecking out.n"; # uncheckout same version
system "cleartool uncheckout -rm -cact "$file"";
}
}
}
これが私のコマンドライン出力です(まるでsystem()呼び出しを使用したかのように):
cleartool: Error: Unable to check in "a5TI.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6cm.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6FT.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6pm.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6TI.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
溶液: 出力を取得するときにもstdエラーストリームを確認してください(振り返ってみると、エラーメッセージを解析しようとしていたのでこれは理にかなっています...まあ)
my @checkInErr = `cleartool checkin -nc "$file" 2>&1`;
回答:
回答№1は1cleartoolからのエラー出力が標準出力(stdout)で出力されない可能性があります。運が良ければ、標準エラー(stderr)で出力されます。もしそうなら、これはうまくいくはずです:
system "cleartool uncheckout -rm -cact "$file" 2>&1";