在我的上一个问题中 @Borodin评论了我的问题:
您应该首先删除Modern :: Perl和namespace :: sweep.应该避免使用行为为pragma的模块.
我有点困惑,因为:
namespace::autoclean
.使用namespace :: autoclean位只是很好的代码卫生,因为它会在包的编译周期结束时从类的命名空间中删除导入的符号,包括Moose关键字.一旦构建了类,就不需要这些关键字.(最好不要在包装的末尾放置Moose).
在书中Intermediate perl
建议使用namespace::autoclean
也.
是的,我用的,而不是autoclean
在sweep
因为一次-模块从doccu
编写这个pragma是为了解决优秀的namespace :: autoclean的一些问题.特别是,namespace :: autoclean将删除由重载安装的特殊符号,因此您不能对重载Perl运算符的对象使用namespace :: autoclean.
......
在大多数情况下,namespace :: sweep应该作为namespace :: autoclean的替代品.发布后,除了自己的以外,该pragma还会传递所有namespace :: autoclean的测试.
而且因为我是一个初学者,我真的很困惑.对我来说,当我阅读:这个模块解决了另一个模块的一些问题 - 意思是:使用这个.
'手册(从我应该学习的地方)说"使用它"和stackoverflow teling的专家:不要使用它.
所以,请有人解释我:
namespace::sweep
或我应该使用namespace::autoclean
或不使用它们?对于'ModernPerl'.当然,我可能不太了解并且"确切地"知道是什么.我所知道的,(再次来自它的doccu)
这将启用严格和警告编译指示,以及Perl 5.10中提供的所有功能.它还启用了perldoc mro中记录的C3方法解析顺序,并加载IO :: File和IO :: Handle,以便您可以在文件句柄上调用方法.将来,它可能包括其他核心模块和编译指示.
当然,不要深刻理解mro
,只能认为它是多重遗传情况下"死亡致命钻石"问题的答案.
到目前为止,我对它非常满意,因为它为我提供了所需的pragma:
use strict;
use warnings;
use feature 'say';
Run Code Online (Sandbox Code Playgroud)
那么,"Modern :: Perl"(以及其他类似的cpanm模块)的"状态"是什么?允许使用,还是不允许?
关于namespace :: sweep的问题:
首先,请注意namespace :: sweep解决的实际问题.
特别是,namespace :: autoclean将删除由重载安装的特殊符号,因此您不能对重载Perl运算符的对象使用namespace :: autoclean.
这意味着如果你的班级有超载的操作员,如果你也是如此,他们将无法工作use namespace::autoclean
.但是只有你这个问题才会出现use overload
.除此之外,namespace :: autoclean就足够了.
其次,它说可以使用namespace :: sweep而不是namespace :: autoclean:
在大多数情况下,namespace :: sweep应该作为namespace :: autoclean的替代品.发布后,除了自己的以外,该pragma还会传递所有namespace :: autoclean的测试.
所以回答你的问题,"使用namespace :: sweep是正确的还是我应该使用namespace :: autoclean或者没有使用它们?"
use overload
那么你在使用namespace :: autoclean时没有问题,所以你可以在这种情况下使用它.