Perl 当已经使用严格警告时,是否有必要使用警告?
代码如下:Perl 当已经使用严格警告时,是否有必要使用警告?,perl,Perl,代码如下: use strict; use warnings; 是使用警告这里有必要吗?是的,有必要 使用严格的和使用警告做不同的事情 从strict模块的手册页: 严格的− 限制不安全构造的Perl pragma 从perlrun(对于-w): 打印可疑事件的警告 构造,例如变量名 只提到一次的变量和 习惯于 在设置之前,重新定义子例程,引用 未定义 文件句柄或以只读方式打开的文件句柄 正在尝试写入,值用作不可用的数字 看 与数字类似,使用数组就像使用标量一样,如果 你的 子例程递归的深度超
use strict;
use warnings;
是使用警告代码>这里有必要吗?是的,有必要
使用严格的
和使用警告
做不同的事情
从strict
模块的手册页:
严格的− 限制不安全构造的Perl pragma
从perlrun
(对于-w
):
打印可疑事件的警告
构造,例如变量名
只提到一次的变量和
习惯于
在设置之前,重新定义子例程,引用
未定义
文件句柄或以只读方式打开的文件句柄
正在尝试写入,值用作不可用的数字
看
与数字类似,使用数组就像使用标量一样,如果
你的
子例程递归的深度超过100,其他的则数不胜数
事情
对。严格防范数量非常有限的事情。警告会提醒您一系列不同且更广泛的问题。是的,请考虑:
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.
因此,建议同时启用这两个选项。几天前,这里出现了同样的问题:。这个链接引出了一个关于严格、警告、诊断和其他类似主题的讨论。“你所说的必要性是什么意思?”这是我的回答
如果您认为严格
和警告
是一回事,那么您就错了。这里的其他人对每一个布拉格语都给出了很好的答案
使用警告
通常会使您成为一名更好的编码员。如果学习很重要,那么我的答案是“是的”
它还将帮助您避免错误,使您的错误更容易理解
总的来说,我想说的是,很少有时候可以保证不同时使用严格
和警告
。我甚至在我的一行程序中使用警告,例如>perl-we'打印“helloworld!”
输入需要几秒钟的时间,但可以为您节省数小时不必要的调试工作。按照该词的实际含义,这是不必要的。也就是说,程序不需要运行。人们经常忘记必要的手段
但是,如果您的问题是“strict是否启用警告?”,则答案是否。您可以通过查看strict的功能
警告在指出应该修复的问题时通常很有用。但是,Perl的警告不需要您修复它们,因此您的程序可以继续运行,即使它发出警告
有些人会告诉你要经常使用警告,但他们制定了这样的规则,这样他们就不必去想它,也不必向不愿去想的人解释它。除了“总是使用警告”之外,说任何话都是不受欢迎的
警告
是开发人员的工具,如果看到警告的人不知道警告是什么,也不知道该怎么做,那么很可能只会引起麻烦或困惑。我见过一些实例,新的PERL开始为程序发出新的警告,然后填满磁盘,因为没有人监视日志文件
我有一条更为微妙的规则“当你要做一些事情时使用警告,如果你不想做,就不要使用警告”
我甚至没有说“总是写无警告代码”。我编写了大量代码,可以只运行一次,也可以从命令行运行,或者在其他情况下运行,这些情况下我并不关心代码的草率。我不喜欢给别人发出肮脏的警告,但我不会为自己做的小事而纠结于此 是否有一个例子表明使用警告
做了其他事情?你应该引用并为使用警告
而不是perlrun-w
@daxim确实是有用的参考,但没有像我从perlrun引用的那样的简明摘要。我没有在乘法(*)中使用未初始化的值$f在perl v 5.8.8下的-e第1行。
,您确定吗?刚刚在5.8.8和5.10.1上进行了测试。两者都给出相同的错误消息。您是否有经过修改的Perl版本?或者你忘了使用警告
@new\u perl,那么您就有了一个非常糟糕的perl安装。(我认为5.8.8在警告中没有提到$f
,但它确实发出了警告。)我经常看到这种情况。我的新回应将是:老实说,我很惊讶,当这一点已经被反复考虑了好几次的时候,社区竟然认为应该把它投得这么高。在我的案例中,答案是基于将问题解释为“是使用警告
是使用严格
的子集吗?”——也就是说使用严格
根本不需要使用警告。