我有一个单行的Perl搜索和替换看起来大致如下:
perl -p -i -e 's/foo/bar/' non-existent-file.txt
因为该文件不存在(这不是故意的,但这是自动构建脚本的一部分,所以我想防止这种情况),Perl退出并出现此错误:
Can't open non-existent-file.txt: No such file or directory.
但是,退出代码仍为零:
echo $?
0
我做错了吗?我应该修改我的脚本,还是我调用Perl的方式?我天真地认为,因为Perl无法找到该文件,所以它将以非零代码退出。
答案 0 :(得分:4)
你可以通过死亡来强制犯错,
perl -p -i -e 'BEGIN{ -f $ARGV[0] or die"no file" } s/foo/bar/' non-existent-file.txt
答案 1 :(得分:4)
因为那不是致命的错误。如果您使用perl -pe'...' file1 file2
,即使file2
不存在,也会继续处理file1
。
以下原因导致发出任何警告,导致退出代码为非零。
$ perl -i -pe'
BEGIN {
$SIG{__WARN__} = sub {
++$error;
print STDERR $_[0];
};
}
END { $? ||= 1 if $error; }
s/foo/bar/g;
' file1 file2
这意味着即使file2
不存在,file1
仍会被处理,但退出代码将为非零。