[perl] 입력 파일을 찾을 수 없을 때 펄 스크립트 (-n / -p로 실행)를 실패하는 가장 좋은 방법은 무엇입니까?

$ 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}'


답변