2011-06-21 23 views
8

代码如下:严格使用时是否需要使用警告?

use strict; 
use warnings; 

这里是必要use warnings;

+0

我经常看到这个。我的新回应将是:http://joelslinux.blogspot.com/2011/06/use-strict-and-warnings.html –

+2

老实说,我很惊讶社区已经看到适合投票这么高的时候http: //stackoverflow.com/search?q=%5Bperl%5D+strict+warnings表明这已被仔细研究过几次。 –

回答

8

是的,这是必要的。

use strictuse warnings做不同的事情。

strict模块的手册页:

严格 - Perl的编译,限制不安全的构造

perlrun(为-w):

输出有关可疑 结构的警告,如仅提及的变量名称 曾经和标量变量是 在设置之前使用 ,重新定义子程序,以 未定义 文件句柄或文件句柄引用以只读方式打开,你是 尝试写上,作为一个数字,这样做值不 看起来像 数字,使用一个数组,就好像它是一个标量,如果 你的 子程序递归超过100深,和无数其他 的东西。

+0

是否有一个示例显示“使用警告”会执行其他操作? –

+0

是 - 请参阅编辑以在评论时发布。 – Alnitak

+1

你应该引用[perldiag](http://p3rl.org/diag)和[perllexwarn](http://p3rl.org/lexwarn)来代替'use warnings'而不是perlrun'-w'。 – daxim

5

是的。严格防范数量非常有限的事情。警告会提醒您注意不同的更广泛的问题。

3

是,考虑:

perl -le "use strict; my $f; my $z = $f*1" 

严格不让你知道,$ f是不确定的,同时加入警告将:

perl -le "use strict; use warnings; my $f; my $z = $f*1" 
Use of uninitialized value $f in multiplication (*) at -e line 1. 

因此建议同时启用。

+0

我没有在'peri v 5.8.8下使用未初始化的值$ f乘以(*)'。*'5.8.8 –

+0

你确定吗?刚刚在5.8.8和5.10.1上进行了测试。两者都给出相同的错误信息。你可能有修改过的Perl版本吗?或者你也许忘了'使用警告'; – Htbaa

+0

@new_perl,那么你有一个非常破碎的Perl安装。 (我认为5.8.8在警告中没有提及'$ f',但它确实发出了警告。) – ikegami

1

“你的意思是必要的?”是我的回答。

如果你认为strictwarnings是一样的东西,你错了。这里的其他人对每个杂注都给出了非常好的答案。

use warnings一般来说会让你成为更好的编码器。如果学习很重要,那么我的答案是“是的”。

它还将帮助您避免错误,使您的错误更容易理解。

一般而言,我会说很少有时候不要同时使用strictwarnings。我甚至在我的单人队中使用警告,例如> perl -we 'print "Hello world!"'

输入数据需要几秒钟,但会为您节省数小时不必要的工作调试时间。

2

这不是必要的在这个词的实际含义。也就是说,一个程序不需要它来操作。人们经常忘记必要的的意思。

但是,如果您的问题是“严格启用警告?”,答案是否定的。你可以看到reading its documentation有什么严格的要求。

warnings通常用于指出您应该修复的问题。但是,Perl的警告并不要求您修复它们,所以即使它发出警告,您的程序也可以继续。

有些人会告诉你总是使用警告,但他们制定了这样的规则,所以他们不必考虑它,或者解释给那些不会考虑它的人。除了“总是使用警告”之外,任何其他说法都是不受欢迎的。

warnings是开发人员的工具,如果看到警告的人不会知道他们是什么或对他们做什么,他们可能会造成烦恼或混乱。我见过一些实例,其中新的perls开始为程序发出新的警告,然后由于没有人监视日志文件而填满了磁盘。

我有一个更细致的规则“当你要做某件事时使用警告,如果不行的话不要使用它们。

我甚至没有说“总是写无警告代码”。我编写的代码很多,我只能运行一次,或者从命令行运行,或者在其他我不在乎流水的情况下运行。我不喜欢给其他人提供警告 - 脏代码,但我不会为自己做的一些小事而着迷。

+0

对那些您不同意的观点进行了恶劣的投票。在我的情况下,答案的基础是将问题解释为意思_“是'使用警告'是'使用严格'的一个子集?” - 即“使用严格”避免了“使用警告”的需要。 – Alnitak

相关问题