$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
ファイルが存在しないときにperlスクリプトが失敗するようにしたいのですが。入力ファイルが存在しないときに-pまたは-nを失敗させる「適切な」方法は何ですか?
$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
ファイルが存在しないときにperlスクリプトが失敗するようにしたいのですが。入力ファイルが存在しないときに-pまたは-nを失敗させる「適切な」方法は何ですか?
回答:
-pスイッチはこのループでコード(-eを次の引数)を包むための単なるショートカットです。
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
(-nは同じですが、continueブロックはありません。)
<>
空のオペレータはに相当しreadline *ARGV
、それから読み込むためのファイルとして連続して各引数を開きます。その暗黙的なオープンのエラー処理に影響を与える方法はありませんが、発生する警告を致命的にすることができます(これは、-iスイッチに関連するいくつかの警告にも影響します)。
perl -Mwarnings=FATAL,inplace -pe 1 foo && echo ok
inplace
カテゴリです。それがなければ、-Mwarnings=FATAL
意味FATAL => all
はありません。とった。
ループの本体にフラグを設定し、ワンライナーの最後にあるENDブロックのフラグを確認します。
perl -pe '$found = 1; ... ;END {die "No file found" unless $found}' -- file1 file2
ファイルが処理されなかった場合にのみ失敗することに注意してください。
すべてのファイルが見つからなかったときに問題を報告するには、次のようなものを使用できます
perl -pe 'BEGIN{ $files = @ARGV} $found++ if eof; ... ;END {die "Some files not found" unless $files == $found}'
BEGIN{die "File not found" unless -f $ARGV[0]}
。(フラグを設定して2つのコードを追加する必要がないので、軽く言います)