我想知道为什么
use warnings;
use strict;
Run Code Online (Sandbox Code Playgroud)
在Perl中不是默认值.每个脚本都需要它们.如果某人(有充分理由)需要禁用它们,则应使用no strict
和/或使用某些命令行参数(对于单行).
是否有太多写得不好的CPAN模块(使用"糟糕"表示没有use strict
)?或者是因为这会破坏生产中的许多代码?我确信有理由,我想知道.
5.14 IO::File
是按需自动加载的,不可能用这些基本的pragma做类似的事情吗?
cjm*_*cjm 52
这是为了向后兼容.Perl 4根本没有严格的限制,并且很可能还有最初为Perl 4编写的脚本仍然可以在Perl 5中正常工作.严格的自动会破坏这些脚本.对于单行而言,情况更糟,其中许多人不愿意声明变量.默认情况下使单行严格可能会破坏数百万个shell脚本和Makefile.
它无法自动加载,因为它增加了限制,而不是功能.在文件句柄上调用方法时加载IO :: File是一回事.但是,除非代码执行严格禁止的操作,否则激活严格是没有意义的.
如果脚本指定的最低版本为5.11.0或更高版本(例如use 5.012
),则会自动打开strict.这不会启用警告,但可能会在将来的版本中添加.此外,如果你在Perl中进行OO编程,你应该知道使用Moose会自动打开strict
和warnings
在该类中.
dax*_*xim 17
如果您使用现代Perl,请说明,您只需启用它即可.除单线strict
外,5.12适用.由于向后兼容性,它不能是默认值.
$ cat strict-safe?.pl
use 5.012;
$foo
$ perl strict-safe\?.pl
Global symbol "$foo" requires explicit package name at strict-safe?.pl line 2.
Execution of strict-safe?.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
dao*_*oad 16
嗯,use strict
现在是默认的,有点像.
从Perl 5.12.0开始,如果您需要Perl> = 5.12.0的版本,那么您的脚本将启用所有向后不兼容的功能,包括默认情况下的严格.
use 5.12.0;
use warnings;
Run Code Online (Sandbox Code Playgroud)
是相同的:
use strict;
use warnings;
use feature ':5.12';
Run Code Online (Sandbox Code Playgroud)
它没有被更广泛地打开,因为这样做会破坏很多人们依赖"正常工作"的脚本.
使用时,Moose还会自动打开严格警告.因此,如果您使用任何基于Moose的Perl OOP,那么您也可以获得免费通行证.
Wes*_*ker 10
这是一个哲学问题,而不是"它不会起作用"的问题.
首先,perl一直在"如果你想要你可以做错的"范式下.这就是为什么那里有很多perl仇敌.许多人宁愿这种语言总是迫使你编写好的代码,但很多快速脚本黑客都不愿意.考虑:
perl -e '@a = split(/[,:]/, $_); print $a[1],"\n";'
Run Code Online (Sandbox Code Playgroud)
现在,在@a前添加一个'my'很容易,但对于一行,一次性脚本人们不想这样做.
第二,是的,我认为大多数CPAN确实需要重写.
我担心你没有一个好的答案,我很害怕.
归档时间: |
|
查看次数: |
4622 次 |
最近记录: |