将perl -w标记的结果放入文件中

时间:2010-03-02 05:25:37

标签: perl file warnings command-prompt

是否可以将-w标记添加到perl程序的第一行,然后从shell(如bash或dos)运行程序并将所有警告写入文件?

perl somescript.pl > somefile.txt

这是在学校检查COBOL计划的桌面回归。我想在我面前把所有的警告放在一张纸上,这样我就可以完成我的程序并逐一修复它们。如果上面的命令不起作用,有没有办法以编程方式将所有脚本的警告写入文件?谢谢你们!

2 个答案:

答案 0 :(得分:4)

试试这个:

perl somescript.pl 2&> somefile.txt

使用普通重定向(>)时,只重定向标准程序输出流,而警告则保存到标准错误输出流。例如,请参阅Bash Reference Manual

CPAN上还有一个Vi::QuickFix模块可以将警告保存到一个文件中,您可以将其加载到Vim中并检查所有警告,而无需手动搜索行号。 (Google为vim quickfix。)但我自己并没有尝试过。

答案 1 :(得分:1)

zoul处理了重定向的东西,所以这里有关于警告的惊人复杂答案。

只需按以下方式调用该程序:perl -w script.pl

这会强制在脚本和所有模块中的任何位置启用警告。在你编写的每个模块中使用warnings pragma真的更好。有关此主题的更多信息,请参阅perldoc perllexwarn

调试时的另一个好处是使用Carp::Always。如果强制每个错误都有完整的堆栈跟踪。我发现这非常有帮助。只需运行您的脚本:

perl -MCarp::Always somescript.pl

或将其放入文件中:

perl -MCarp::Always somescript.pl 2&> somefile.txt

最后,我会更多地从你的问题中解脱出来。许多人喜欢使用Log4Perl之类的日志库来检测代码。这样的工具允许您在代码的各个运行中启用某个级别(例如,正常或调试)或应用程序的特定部分的日志记录。这是调试print语句的最终(?)演变。在开发过程中调试失败以及在达到维护阶段后在现场调试失败非常有用。