Die*_*ira 1 perl module class list object
我是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;
Run Code Online (Sandbox Code Playgroud)
这是脚本:
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";
}
Run Code Online (Sandbox Code Playgroud)
第一个问题是这个new
.
$self->{'filas'} = [];
Run Code Online (Sandbox Code Playgroud)
您正在初始化$self->{'filas'}
为空数组引用.这将吹走任何通过的东西new
.你可能想要的是:
$self->{filas} //= [];
Run Code Online (Sandbox Code Playgroud)
这与以下相同:
$self->{filas} = $self->{filas} // [];
Run Code Online (Sandbox Code Playgroud)
//
是"定义或"运算符.这说只是初始化,$self->{filas}
如果它是未定义的.它比使用更安全,||=
因为有一些有效的东西是假的.
第二个问题是,你是如何传递filas
到new
.您正在$self->{filas}
使用数组引用进行初始化是您的线索.
my @filas = (1, 2, 3, 4, 5, 6);
my $squid = Squid->new(
"versao" => '1.0',
"origem" => 'C:\temp',
"filas" => @filas
);
Run Code Online (Sandbox Code Playgroud)
这就像说:
my $squid = Squid->new(
"versao" => '1.0',
"origem" => 'C:\temp',
"filas" => 1,
2, 3, 4, 5, 6
);
Run Code Online (Sandbox Code Playgroud)
你只是把一大堆东西放在了应该是一个偶数大小的列表的末尾,用作哈希.
该=>
运营商基本上是一样的逗号.它不会创建对,它只允许您在左侧的字符串周围省略引号.key => @values
不是一对,它是key => $values[0], $values[1], $values[2], ...
.new
试图将该列表视为散列,只要有偶数个元素它就会"起作用".
相反,您需要传入数组引用.key => \@values
.
my $squid = Squid->new(
"versao" => '1.0',
"origem" => 'C:\temp',
"filas" => \@filas
);
Run Code Online (Sandbox Code Playgroud)