Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果属性不存在,如何使用perl自动加载和Moose::Meta::Class动态添加属性?_Perl_Code Generation_Moose - Fatal编程技术网

如果属性不存在,如何使用perl自动加载和Moose::Meta::Class动态添加属性?

如果属性不存在,如何使用perl自动加载和Moose::Meta::Class动态添加属性?,perl,code-generation,moose,Perl,Code Generation,Moose,我正在尝试向Class1Resource1属性添加值为test。 但是它不起作用。我的代码有什么问题 package Class1; use Moose; sub AUTOLOAD { my $self = shift; our $AUTOLOAD; my $unknown_method_name = (split(/::/, $AUTOLOAD))[-1]; require Class2; # generator class Class2->ge

我正在尝试向
Class1
Resource1
属性添加值为
test
。 但是它不起作用。我的代码有什么问题

package Class1;
use Moose;

sub AUTOLOAD {
    my $self = shift;
    our $AUTOLOAD;
    my $unknown_method_name = (split(/::/, $AUTOLOAD))[-1];
    require Class2; # generator class
    Class2->generate_one($self, $unknown_method_name);
}


package Class2;
use Moose;

sub generate_one {
  my ($self, $object, $p) = @_;
  $object->meta->add_attribute(
    $p => {
      is => 'ro',
      default => 'test',
      lazy => 1
    }
  );
}


package main;
my $a = Class1->new;
warn $a->Resource1; # must be 'test' but showing Moose::Meta::Attribute=HASH(0x333ca10)

您生成了属性及其访问器,但忘记调用访问器。所以代码在第一次调用时不返回任何内容

更正的示例:

子自动加载{
我的$self=shift;
我们的$AUTOLOAD;
我的$unknown_method_name=(拆分(/:/,$AUTOLOAD))[-1];
需要类别2;#发电机类别
Class2->生成一个($self,$unknown\u方法\u名称);
返回$self->$unknown\u方法\u名称(@);
}

这里有几句话可以解释