【问题标题】:Enable global warnings启用全局警告
【发布时间】:2011-06-11 03:04:50
【问题描述】:

我必须优化一个用 Perl 编写的 Intranet(大约 3000 个文件)。我要做的第一件事是启用警告“-w”或“use warnings;”,这样我就可以摆脱所有这些错误,然后尝试实现“use strict;”。

有没有办法告诉 Perl 一直使用警告(就像 PHP 的 php.ini 中的设置),而无需修改每个脚本以在其第一行添加“-w”?

我什至想为/usr/bin/perl 起一个别名,或者将其移动到另一个名称并制作一个简单的脚本,而不是仅仅添加-w 标志(如代理)。

你会如何调试它?

【问题讨论】:

  • 很难接受所有 3 人都有帮助的答案……@tchrist 和 @Michael Carman 首先给出了我正在寻找的答案,但 @Jonathan Leffler 给出了一个很好的建议“不要那样做”(并对我的第二个问题给出了很好的解释:你将如何调试它?)......,如果我接受@Jonathan Leffler 的回答,我希望没有人会感到不安。谢谢大家的帮助。

标签: perl debugging cgi warnings


【解决方案1】:

嗯……

可以将 PERL5OPT 变量设置为保持-w。有关详细信息,请参阅perlrun manpage。我希望你也考虑污染,例如 -T-t,用于安全跟踪。

但我不羡慕你。在没有 use warningsuse strict 的利益的情况下开发的代码改造通常是皇家 PITA。

我有一些standard boiler-plate 用来启动新的 Perl 程序。但我还没有考虑过 CGI 程序,它可能会受益于针对该样板的一些调整。

【讨论】:

  • 我现在测试了 PERL5OPT 方法,也许我不理解文档,但是我在终端“export PERL5OPT=w”中运行了一个导出命令,之后我在该终端会话中运行的每个脚本都应该-w 开关的好处(有效),但是当我从 apache 加载脚本时,它没有效果,有一种方法可以为 apache 做这个,httpd.conf 或任何地方的一些设置?
【解决方案2】:

改造警告和严格是很难的。我不推荐大爆炸的方法,在所有事情上都设置警告(更不用说限制了)。你会被警告淹没到无用的地步。

您首先在脚本使用的模块上启用警告(有一些,不是吗?),而不是对所有内容都应用警告。清理核心,然后开始在外围工作,一次一个单元。所以,事实上,我建议使用一个简单的 (Perl) 脚本,它只查找不以散列开头的行并添加 use warnings;(也可能是 use strict;,因为您将要处理一次一个脚本),因此您可以一次进行一个脚本的翻新。

换句话说,您最好在要更新文件时实际编辑每个文件。

我只会使用一揽子选项来简单评估问题的范围:它是一场彻底的彻底灾难,还是只是几个文件中的几个小错误。可悲的是,如果代码是在没有警告和严格的情况下开发的,它更有可能是“灾难”而不是“最小”。

您可能会发现您的前辈很容易复制和粘贴,并且在复制的代码中反复出现一些错误的习语。编写一个修复每个问题的 Perl 脚本。我的个人bin 目录中有一堆fix* 脚本,它们处理各种变化——要么修复顽固(或者,更常见的是,干脆离去的)同事造成的问题,要么适应我自己不断变化的标准。

【讨论】:

  • 我已经修复了模块,我有一个(cgilib.pl)每个脚本都使用,另外 8 个被不同的脚本使用。现在我必须潜入脚本池来修复它们。我做了另一件事,我让 cgilib.pl 记录访问它的脚本的每条路径(使用 $0),到目前为止只有 273 个脚本经常使用,所以我将从它们开始,我有一种感觉,大约 70%脚本老了,根本没用过,如果不注册到日志里,我会复制到备份服务器上,从生产服务器上删除。
  • @radu:这听起来很典型 - 一个经典的 80:20 规则(尽管在这种情况下它更接近 90:10),其中 20% 的脚本完成大部分工作,其余大部分工作被遗忘或很少使用。记录正在使用的脚本是非常明智的——它告诉你应该把精力集中在哪里。即使在 273 中,也可能会有 20 到 50 个真正被大量使用,而其余的则较少使用。祝你好运!
【解决方案3】:

您可以通过将-Mwarnings -Mstrict 添加到您的PERL5OPT 环境变量来为所有Perl 脚本设置警告和限制。详情请见perlrun

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 2017-06-02
    • 1970-01-01
    • 2019-09-10
    • 2010-10-06
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多