代码如下:
这里需要使用
use strict;
use warnings;
这里需要使用
use warnings;
吗?use strict;
use warnings;
use warnings;
吗?是的,这是必要的。
use strict
和use warnings
有不同的作用。
从strict
模块的手册中可以看到:
strict − 用于限制不安全构造的Perl编译指示
从perlrun
(对于-w
)中可以看到:
打印关于可疑构造的警告,例如仅被提及一次的变量名称、在设置之前使用的标量变量、重新定义的子例程、对未定义文件句柄或只读打开的文件句柄的引用,您正在尝试进行写操作、被用作数字但看起来不像数字的值、将数组用作标量、如果您的子例程递归超过100个深度以及无数其他事情。
use warnings
做了其他的事情? - new_perl是的。strict只针对很少的问题进行严格检查。而warnings则警告您可能会遇到的更广泛的问题。
几天前在这里也有相同的问题:Which safety net do you use in Perl?。该链接引导到关于strict、warnings、diagnostics和其他类似主题的讨论。
是的,请考虑以下内容:
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.
use warnings;
了。 - Htbaa$f
,但是它确实会发出警告。) - ikegami警告
通常有助于指出需要修复的问题。但是,Perl的警告并不要求你修复它们,因此即使程序发出警告,它仍然可以继续运行。警告
是开发人员的工具,如果看到警告的人不知道它们是什么或该怎么处理它们,那么它们可能只会引起恼怒或困惑。我见过一些新的Perl版本开始为程序发出新的警告,然后由于没有人监视日志文件,磁盘被填满了。use warnings
是use strict
的子集吗?”即是否use strict
完全取代了需要使用use warnings
。 - Alnitak“必要”是我的回答。
如果你认为strict
和warnings
是一样的,那么你就错了。其他人已经给出了关于每个编译指示的很好的答案。
use warnings
通常会让你成为一个更好的编码者。如果学习很重要,那么我的答案是“是的”。
它还将帮助您避免错误,使您的错误更容易理解。
总的来说,我会说很少有时候不使用strict
和warnings
是合理的。我甚至在我的单行代码中使用警告,例如:> perl -we 'print "Hello world!"'
输入几秒钟的时间,但可以节省您数小时不必要的调试工作。