我正在创建一个像这样的新对象:
TestObject->new(@array1, @array2)
我的new
方法如下所示:
sub new {
my $class = shift;
my $self = {};
my $self->{Array1} = shift;
my $self->{Array2} = shift;
bless($self, $class);
return $self;
}
作为访问数据的简单测试,我正在尝试这个,然后一旦我开始工作,我就可以构建更有意义的逻辑:
sub mymethod {
my $self = shift;
my $param = shift;
my $array1Value = shift(my $self->{Array1});
my $array2Value = shift(my $self->{Array2});
print $array1Value." ".$array2Value;
}
但是当我致电mymethod
时,我收到了这个错误:
Type of arg 1 to shift must be array (not hash element) at Tests/MyObject.pm line 21, near "})"
连连呢?我读了this page on Perl data structures,但他们没有使用shift
方法创建数组哈希的示例。所以我的问题可能就在那里。
答案 0 :(得分:5)
将数组作为参数传递时,它们会被展平。您可以传递对它们的引用。见perlsub
#!/usr/bin/env perl
package foo;
sub new {
my $class = shift;
my $self = {};
$self->{Array1} = shift;
$self->{Array2} = shift;
bless($self, $class);
return $self;
}
sub mymethod {
my $self = shift;
my $param = shift;
my $array1Value = shift( @{$self->{Array1}} );
my $array2Value = shift( @{$self->{Array2}} );
print "$array1Value $array2Value\n";
}
package main;
my @a = ( 0, 1, 2);
my @b = ( 3, 4, 5);
my $o = new foo( \@a, \@b );;
$o->mymethod;
答案 1 :(得分:4)
在这种情况下,你必须使用指向数组的指针,而不是数组:
TestObject->new([@array1], [@array2])
然后再
my $array1Value = shift(@{$self->{Array1}});
答案 2 :(得分:1)
您正在移动arrayref而不是实际数组。
你可能正在寻找的语法是:
my $array1Value = shift @{ $self->{Array1} };
my $array2Value = shift @{ $self->{Array2} };
注意如何使用@
取消引用数组。
答案 3 :(得分:0)