如何使用Class :: Std和Perl6 :: Export :: Attrs

时间:2015-10-30 16:15:32

标签: perl cpan

我开始了一个新项目并决定遵循一些Perl最佳实践'建议,围绕Class::Std设计一切。后来我才发现这个模块已被弃用了,我应该使用像Moose这样的东西,但是:a)我不想要那么重的东西; b)我有点远没有重新架构我的对象模型/系统。我想从Class::Std对象导出一些子例程,但它不会工作。

这是test.pl:

use Baz;

print foobar();

这是一个有效的Baz.pm:

package Baz;

use Perl6::Export::Attrs;

sub foobar :Export(:DEFAULT)
{
        "Baz\n";
}

1;

当我运行它时,我得到了预期的结果:

$ perl test.pl
Baz

现在我按字母顺序添加Class::Stduse,因为我是这样的OCD:

包Baz;

use Class::Std;
use Perl6::Export::Attrs;

sub foobar :Export(:DEFAULT)
{
        "Baz\n";
}

1;

导致一团糟:

$ perl test.pl
Subroutine Baz::MODIFY_HASH_ATTRIBUTES redefined at /opt/perl/lib/site_perl/5.22.0/Perl6/Export/Attrs.pm line 19.
Subroutine Baz::MODIFY_CODE_ATTRIBUTES redefined at /opt/perl/lib/site_perl/5.22.0/Perl6/Export/Attrs.pm line 19.
Baz

虽然它确实有效。重新安排uses s:

包Baz;

use Perl6::Export::Attrs;
use Class::Std;

sub foobar :Export(:DEFAULT)
{
        "Baz\n";
}

1;

结果:

$ perl test.pl
Undefined subroutine &main::foobar called at test.pl line 3.

有没有合理的方法将这两个包一起使用?对于Class::StdPerl6::Export::Attrs,是否有相当轻量级的,几乎可以替代?

版本:

  • Perl:5.22
  • Class :: Std:0.013
  • Perl6 :: Export :: Attrs:0.000004

0 个答案:

没有答案