在我的last question @Borodin评论我的问题:
首先应该删除Modern :: Perl和namespace :: sweep。 应避免使用行为为pragma的模块。
我有点困惑,因为:
namespace::autoclean
。use namespace :: autoclean bit就像它一样简单的代码卫生 从类的命名空间中删除导入的符号 你的包的编译周期,包括Moose关键字。一旦上课 已经构建,不需要这些关键字。 (这是首选 在包裹的末尾放置没有驼鹿。)
在书中Intermediate perl
建议也使用namespace::autoclean
。
是的,我使用的是代替autoclean
sweep
模块 - 因为from the doccu
这篇编译指出是为了解决一些优秀问题 命名空间::自动清洗。特别是,namespace :: autoclean将被删除 由重载安装的特殊符号,因此您无法使用 对重载Perl运算符的对象执行namespace :: autoclean。
... ...
在大多数情况下,namespace :: sweep应该作为替代品 for namespace :: autoclean。一旦发布,这个pragma将全部通过 namespace :: autoclean的测试,除了它自己的。
因为我是初学者,我真的很困惑。对我来说,当我阅读:这个模块解决了另一个模块的一些问题 - 意思是:使用这个。
'手册(我应该从哪里学到)说“使用它”和stackoverflow teling的专家:不要使用它。
所以,请有人解释我:
namespace::sweep
是正确的还是我应该使用namespace::autoclean
或不使用mro
?对于'ModernPerl'。当然,我可能不太了解并且“确切地”知道是什么。我所知道的,(再次来自它的doccu)
这会启用strict和warnings pragma,以及所有 Perl 5.10中提供的功能。它还支持C3方法解析 按照perldoc mro中的说明命令并加载IO :: File和IO :: Handle 这样你就可以在文件句柄上调用方法。在将来,它可能会 包括其他核心模块和编译指示。
当然,不要对use strict;
use warnings;
use feature 'say';
深表理解,只能认为这是多重遗产情况下“致命的死亡钻石”问题的答案。
到目前为止,我对此非常满意,因为它为我提供了所需的pragma:
{{1}}
那么,“Modern :: Perl”(以及其他类似的cpanm模块)的“状态”是什么?允许使用,不是吗?
答案 0 :(得分:5)
关于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时没有问题,所以你可以在这种情况下使用它。 / LI>
醇>
答案 1 :(得分:3)
指定use 5.014;
(或其他版本> = 5.011)将自动执行use strict;
并为您启用该版本的所有功能; IMO这就是Modern :: Perl没有获得大量牵引力的部分原因。
我一直不喜欢Modern::Perl
因为它没有描述它的作用;这是其他人的想法"现代"在过去的一些固定点。