找不到输入文件时,如何最好地(惯用地)使 perl 脚本(使用 -n/-p 运行)失败?

Wil*_*ell 11 perl

$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
Run Code Online (Sandbox Code Playgroud)

当文件不存在时,我真的希望 perl 脚本失败。当输入文件不存在时,使 -p 或 -n 失败的“正确”方法是什么?

Gri*_*nnz 6

-p开关只是为了在这个循环中包装你的代码(参数如下-e)的快捷方式:

LINE:
  while (<>) {
      ...             # your program goes here
  } continue {
      print or die "-p destination: $!\n";
  }
Run Code Online (Sandbox Code Playgroud)

(-n 是相同的,但没有 continue 块。)

<>空的操作等同于readline *ARGV,而且在继承开始后的每个参数作为一个文件进行读操作。没有办法影响该隐式打开的错误处理,但您可以使其发出致命警告(注意,这也会影响与 -i 开关相关的几个警告):

perl -Mwarnings=FATAL,inplace -pe 1 foo && echo ok
Run Code Online (Sandbox Code Playgroud)