在使用严格时是否有必要使用警告?

时间:2011-06-21 07:17:23

标签: perl

代码如下:

use strict;
use warnings;

这里需要use warnings;吗?

6 个答案:

答案 0 :(得分:8)

是的,这是必要的。

use strictuse warnings执行不同的操作。

strict模块的联机帮助页:

  

strict - Perl编译指示限制不安全的构造

来自perlrun(适用于-w):

  

打印有关可疑的警告   构造,例如变量名               只提到一次和标量变量   用过的               在设置之前,重新定义子例程,引用   未定义               文件句柄或文件句柄以只读方式打开               尝试写入,用作不能的数字的值   看               像数字一样,使用数组就好像它是一个标量一样   您的               子程序递归超过100深,其他无数               的东西。

答案 1 :(得分:5)

是。严格防范非常有限的事情。警告提醒您注意一系列不同的问题。

答案 2 :(得分:4)

几天前,同样的问题出现在这里:Which safety net do you use in Perl?。该链接导致对严格,警告,诊断和其他类似主题的讨论。

答案 3 :(得分:3)

是的,请考虑:

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

strict不会让你知道$ f是未定义的,而添加警告将会:

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

因此建议启用两者。

答案 4 :(得分:2)

该词的实际含义并非必要。也就是说,程序不需要它来操作。人们经常忘记必要的含义。

但是,如果您的问题是“严格启用警告吗?”,答案是否定的。您可以通过reading its documentation查看严格的内容。

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

有些人会告诉你总是使用警告,但他们制定了这样的规则,因此他们不必考虑它或向不会考虑它的人解释它。除了“总是使用警告”之外,说出一些不受欢迎的立场。

warnings是开发人员的工具,如果看到警告的人不知道他们是什么或怎么做,他们可能只会引起烦恼或混乱。我已经看到一些新的perls开始为程序发出新警告的实例,然后填充磁盘,因为没有人监视日志文件。

我有一个更细微的规则“当你对它们采取行动时使用警告,如果你不这样做就不要使用警告”。

我甚至没有说“始终写无警告代码”。我写的代码很多,我只会运行一次,或者从命令行运行,或者在其他我不关心这些问题的情况下运行。我不喜欢给其他人提供警告脏代码,但我不会因为我为自己做的小事情而烦恼。

答案 5 :(得分:1)

“你的意思是什么?”是我的回复。

如果您认为strictwarnings是一回事,那就错了。这里的其他人对每个pragma都给出了非常好的答案。

use warnings通常会让你成为更好的程序员。如果学习很重要,那么我的回答是“是的。”

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

一般情况下,我会说很少有人不保证同时使用strictwarnings。我甚至在我的单行中使用警告,例如> perl -we 'print "Hello world!"'

输入需要几秒钟,但可以节省数小时不必要的工作调试。