gpt4 book ai didi

perl - 使用或不使用 namespace::sweep 和/或 Modern::Perl

转载 作者:行者123 更新时间:2023-12-04 23:08:15 24 4
gpt4 key购买 nike

在我的last question @Borodin 评论了我的问题:

You should start by removing Modern::Perl and namespace::sweep. Modules that behave as pragma should be avoided.

我有点困惑,因为:

The use namespace::autoclean bit is simply good code hygiene, as it removes imported symbols from your class's namespace at the end of your package's compile cycle, including Moose keywords. Once the class has been built, these keywords are not needed. (This is preferred to placing no Moose at the end of your package).

Intermediate perl 书中也推荐使用 namespace::autoclean

是的,我用 sweep 模块代替了 autoclean - 因为再次 from the doccu

This pragma was written to address some problems with the excellent namespace::autoclean. In particular, namespace::autoclean will remove special symbols that are installed by overload, so you can't use namespace::autoclean on objects that overload Perl operators.

... ...

In most cases, namespace::sweep should work as a drop-in replacement for namespace::autoclean. Upon release, this pragma passes all of namespace::autoclean's tests, in addition to its own.

而且因为我是 perl 初学者,我真的很困惑。对我来说,当我阅读:这个模块解决了另一个模块的一些问题 - 意思是:使用这个

'手册(我应该从哪里学习)说“使用它”和来自 stackoverflow teling 的专家:不要使用它

所以请有人解释一下:

  • 使用 namespace::sweep 是正确的,或者我应该使用 namespace::autoclean 还是不使用它们?
  • 如果没有,为什么最佳实践推荐它?

对于“ModernPerl”。当然,我可能并不深入和“确切地”理解它的作用。我所知道的,(再次来自它的 doccu)

This enables the strict and warnings pragmas, as well as all of the features available in Perl 5.10. It also enables C3 method resolution order as documented in perldoc mro and loads IO::File and IO::Handle so that you may call methods on filehandles. In the future, it may include additional core modules and pragmas.

当然,对mro理解不深,只认为是多继承情况下“致命钻石”问题的解答。

直到今天,我都对它感到非常满意,因为它缩短了我所需的 pragma:

use strict;
use warnings;
use feature 'say';

那么,“Modern::Perl”(以及其他类似的 cpanm 模块)的“状态”是什么?是否允许使用?

最佳答案

关于命名空间::sweep 的问题:

首先,注意 namespace::sweep 解决的实际问题。

In particular, namespace::autoclean will remove special symbols that are installed by overload, so you can't use namespace::autoclean on objects that overload Perl operators.

这意味着如果你的类有重载的运算符,如果你也使用 namespace::autoclean,它们将无法工作。但是这个问题只有在你使用重载时才会出现。除此之外,namespace::autoclean 就足够了。

其次,它说可以使用 namespace::sweep 代替 namespace::autoclean:

In most cases, namespace::sweep should work as a drop-in replacement for namespace::autoclean. Upon release, this pragma passes all of namespace::autoclean's tests, in addition to its own.

所以要回答您的问题,“使用 namespace::sweep 是否正确,或者我应该使用 namespace::autoclean 还是不使用它们?”

  1. 您应该按照 Moose Best Practices 的建议至少使用其中一种。
  2. 通常可以使用 namespace::sweep,因为它表示它是为此而设计的,并且它通过了所有 namespace::autoclean 的测试。
  3. 尽管上面提到了第 2 点,但如果你不使用重载,那么使用 namespace::autoclean 就没有问题,所以你可以在这种情况下使用它。

关于perl - 使用或不使用 namespace::sweep 和/或 Modern::Perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com