$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
파일이 없으면 펄 스크립트가 실패하고 싶습니다. 입력 파일이 없을 때 -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
답변
루프 본문에 플래그를 설정하고 oneliner 끝의 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}'