代码如下:
use strict;
use warnings;
这里需要use warnings;
吗?
答案 0 :(得分:8)
是的,这是必要的。
use strict
和use 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)
“你的意思是什么?”是我的回复。
如果您认为strict
和warnings
是一回事,那就错了。这里的其他人对每个pragma都给出了非常好的答案。
use warnings
通常会让你成为更好的程序员。如果学习很重要,那么我的回答是“是的。”
它还可以帮助您避免错误,使您的错误更容易理解。
一般情况下,我会说很少有人不保证同时使用strict
和warnings
。我甚至在我的单行中使用警告,例如> perl -we 'print "Hello world!"'
输入需要几秒钟,但可以节省数小时不必要的工作调试。