3

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

perl somescript.pl > somefile.txt

这是在学校检查 COBOL 程序的一种回归。我想把我面前的所有警告写在一张纸上,这样我就可以通过我的程序并一个一个地修复它们。如果上述命令不起作用,是否有办法以编程方式将脚本的所有警告放入文件中?多谢你们!

4

2 回答 2

4

试试这个:

perl somescript.pl 2&> somefile.txt

当您使用普通重定向 ( >) 时,您只重定向标准程序输出流,而警告被保存到标准错误输出流。参见例如Bash 参考手册

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

于 2010-03-02T05:29:46.810 回答
1

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

只需像这样调用程序: perl -w script.pl

这会强制在脚本和所有模块中的任何地方启用警告。在您编写的每个模块中使用警告编译指示确实会更好。有关此主题的更多信息,请参阅perldoc perllexwarn

调试时另一个很好的技巧是使用Carp::Always。如果对每个错误强制执行完整的堆栈跟踪。我觉得这非常有帮助。只需像这样运行您的脚本:

perl -MCarp::Always somescript.pl

或将其放入文件中:

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

最后,我将进一步偏离您的问题。许多人喜欢使用Log4Perl 之类的日志库来检测他们的代码。像这样的工具允许您在特定级别(例如正常或调试)或在您的代码的单独运行时在应用程序的特定部分启用日志记录。这是调试打印语句的最终(?)演变。它在开发过程中调试故障时非常有用,一旦您进入维护阶段,它在现场调试中非常有用。

于 2010-03-02T15:48:37.480 回答