我开始了一个新项目并决定遵循一些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::Std
,use
,因为我是这样的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::Std
或Perl6::Export::Attrs
,是否有相当轻量级的,几乎可以替代?
版本: