我正在为一些Perl脚本构建回归系统(而不是单元测试).
该系统的核心组成部分是
`perl script.pl @params 1>stdoutfile 2>stderrfile`;
Run Code Online (Sandbox Code Playgroud)
但是,在实际处理脚本的过程中,它们有时不会编译(Shock!).但是perl本身会正确执行.但是,我不知道如何在stderr上检测Perl是否无法编译(因此写入stderr),或者我的脚本在输入上被禁止(因此写入stderr).
如何检测程序是否执行,没有详尽地查找Perl错误消息并轻击stderr文件?
通过两个步骤执行此操作可能最简单:
system('$^X -c script.pl');
if ($? == 0) {
# it compiled, now let's see if it runs
system('$^X script.pl', @params, '1>stdoutfile', '2>stderrfile');
# check $?
}
else {
warn "script.pl didn't compile";
}
Run Code Online (Sandbox Code Playgroud)
注意使用$^X而不是perl.这更灵活,更强大.它确保您从相同的安装运行,而不是在路径中首先显示的任何解释器.系统调用将继承您的环境(包括PERL5LIB),因此生成不同版本的perl可能会导致难以诊断的兼容性错误.
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |