我想知道为什么
use warnings; use strict;
在Perl中不是默认值。它们是每个脚本都需要的。如果有人(为了很好的原因)需要禁用它们,他们应该使用没有严格和/或应该使用一些命令行参数(一行)。
是否有太多不良写的CPAN模块(使用“不好”意思没有使用严格)?还是因为这可以打破很多已经在生产中的代码?我相信有一个理由,我想知道它。
在5.14 IO :: File根据需要自动加载,不可能做这样与这些基本的pragmas类似的东西?
解决方法
这是为了向后兼容。 Perl 4没有严格的,并且很可能仍然有脚本原来为Perl 4编写,仍然与Perl 5正常工作。严格自动将打破这些脚本。单线程的情况甚至更糟,其中许多不需要声明变量。默认情况下,使一个线程严格将破坏可能数百万的shell脚本和Makefile在那里。
它不能自动加载,因为它添加了限制,而不是功能。当在文件句柄上调用方法时,加载IO :: File是一件事。但激活严格,除非代码做了严格禁止的事情是无意义的。
如果脚本指定了最低版本5.11.0或更高版本(例如使用5.012),则为strict is turned on automatically.这不会启用警告,但也许会在将来的版本中添加。此外,如果您在Perl中进行OO编程,您应该知道使用Moose会自动打开该类中的严格和警告。