use common::sense; # supposed to be the same,with much lower memory usage,as: # # use strict qw(vars subs); # use feature qw(say state switch); # no warnings; # use warnings qw(FATAL closed threads internal debugging pack substr malloc # unopened portable prototype inplace io pipe unpack regexp # deprecated exiting glob digit printf utf8 layer # reserved parenthesis taint closure semicolon); # no warnings qw(exec newline);
除了undef警告,有时候是麻烦,我通常发现标准警告是好的.是否值得切换到common :: sense而不是我的正常使用严格;使用警告
解决方法
我这样的模块的问题是它们捆绑了一组行为,并隐藏了具有可变意义的行为glib名称.
例如,Modern :: Perl今天包括启用一些perl 5.10功能并使用严格和警告.但是当Perl 5.12或5.14或5.24出现的时候会出现什么新的好东西呢,社区发现我们需要在各地使用frobnitz pragma?将现代:: Perl提供一套一致的行为,否则它将保持“现代”.如果MP随着时间的推移,它将破坏不符合编译器要求的锁定步骤的现有系统.它增加额外的兼容性测试升级.至少这是我对MP的反应.我会第一个承认,色彩比我更聪明10倍,程序员更好 – 但我仍然不同意他对这个问题的判断.
common :: sense也有一个名字问题.谁有常识的概念?会随着时间的推移而改变吗?
我喜欢使用一个可以轻松创建自己的标准模块的模块,甚至为特定任务创建一组相关的模块/编译指示(如日期时间操作,数据库交互,HTML解析等).
我喜欢Toolkit的想法,但它有几个原因:它使用源过滤器,宏系统过于复杂和脆弱.我非常尊重Damian Conway,他制作出辉煌的代码,但有时候他有点太过分了(至少在生产中,实验是好的).
我没有足够的时间打字使用严格;使用警告;感觉需要创建我自己的标准导入模块.如果我觉得强烈需要自动加载一组模块/编译指示,那么类似于Toolkit的类似于创建标准功能组的工具将是理想的:
use My::Tools qw( standard datetime sqlite );
要么
use My::Tools; use My::Tools::DateTime; use My::Tools::sqlite;
工具包非常接近我的理想.它的致命缺陷是一个很大的障碍.
关于拼写选择是否有意义,那就是品味的问题.我宁愿在我需要做一些需要它的东西的块中使用偶尔没有严格的“foo”或者没有警告“bar”,而不是关闭整个文件的检查.另外,IMO,内存消耗是一个红色的鲱鱼.因人而异.
更新
看起来有这么多(多少?)不同的模块在CPAN上浮动.
>有latest,不再是最新的.演示部分命名问题.
>另外,uni::perl增加了unicode部分组合.
> ToolSet提供了Toolkit的一些功能,但没有源代码过滤器.
>我将在这里加入Moose,因为它会自动向呼叫包添加严格和警告.
>最后Acme::Very::Modern::Perl
这些模块的扩散和重叠需求的潜力又增加了另一个问题.
如果你写的代码如下:
use Moose; use common::sense;
什么选项可以启用哪些pragmas?