【发布时间】:2016-11-01 21:31:20
【问题描述】:
我是 Perl 的新手,抱歉我的愚蠢问题。
我搜索过,但没有找到方法。
我创建了一个类,它的一个属性需要是一个对象列表,我需要稍后调用这个列表。
我尝试将对象推送到列表中我收到消息:
匿名哈希中的奇数个元素...
我的包裹
package Squid;
use strict;
use warnings;
sub new
{
my $class = shift;
my $self = {@_ };
print "Creating new $class\n";
$self->{'filas'} = [];
bless ($self, $class);
return $self;
}
1;
这是脚本:
use Squid;
use warnings;
use strict;
my $fila = FilaSquid->new("nome" => 'Fila 1', "profundidade" => 45);
my $fila2 = FilaSquid->new("nome" => 'Fila 2', "profundidade" => 7);
my $squid = Squid->new("versao" => '1.0', "origem" => 'C:\temp', "filas" => @filas);
print "\nA versao da fila eh ".$squid->{versao};
print "\nA origem da fila eh ".$squid->{origem}."\n";
foreach my $line ($squid->{filas}) {
print $line->{nome}."\n";
}
【问题讨论】:
-
您运行的代码不是您显示的代码。
Global symbol "@filas" requires explicit package name (did you forget to declare "my @filas"?) at script.pl line 9. script.pl had compilation errors.。请参阅How to Ask 并提供minimal reproducible example。 -
这里有几个问题: (1)
@filas没有声明。您是否忘记声明并插入$fila和$fila2? (2)FilaSquid没有模块声明。 (3) 在您的构造函数中,您将覆盖$self->{'filas'},即使您也将它作为参数传递。 (4) 你可能不想将@filas作为ARRAYREF传递。
标签: list perl class object module