Perl Moo:将属性添加到另一个(非当前)包

Perl Moo:将属性添加到另一个(非当前)包,perl,attributes,moose,moo,Perl,Attributes,Moose,Moo,以下是我的真实代码的简化示例: #!/usr/bin/perl package X; use Moo; sub add_attr_for_another_package { my ($package) = @_; eval "package $package"; has 'q' => (is=>'rw', default=>123); } package Y; use Moo; X::add_attr_for_another_package('Y'); m

以下是我的真实代码的简化示例:

#!/usr/bin/perl

package X;
use Moo;

sub add_attr_for_another_package {
  my ($package) = @_;
  eval "package $package";
  has 'q' => (is=>'rw', default=>123);
}

package Y;
use Moo;

X::add_attr_for_another_package('Y');

my $obj = Y->new;
print $obj->q, "\n";
我尝试从package
X
中定义的函数向package
Y
添加属性。这不起作用:

$ ./test.pl 
Can't locate object method "q" via package "Y" at ./test.pl line 18.
请帮助我如何从另一个包中定义的方法向包添加属性


我应该切换到Moose吗?

package
会影响编译代码的包。它显然不会影响已编译的代码(例如,对
的调用已
)!换句话说,当
指令实际上受到影响时,必须编译对
的调用

sub add_attr_for_another_package {
  my ($package) = @_;
  eval("
    package $package;
    has 'q' => (is=>'rw', default=>123);
    return 1;
  ")
    or die $@;
}