所以我想做的就是将数组传递给PERL中的函数(或子例程)
所以@Temp
包含2个数组
[0] = {xx,xx,xx,xx,xx}
[1] = {xx,xx,xx,xx,xx}
#returns array containing two arrays
my @temp = $lineParser->parseLine($_);
@handOne = $cardFactory->createHand(@Temp[0]);
@handTwo = $cardFactory->createHand(@Temp[1]);
这是包含在单独的类(或包或其他)中的createHand方法
sub createHand
{
my $self = shift;
my @temp = @_;
my @arrayOfCards;
foreach(@temp)
{
my $value = substr($_,0,1);
my $color = substr($_,1,1);
push(@arrayOfCards,new Card($value,$color));
}
return @arrayOfCards;
}
我遇到的问题是数组被传递但在数组的开头包含ARRAY(XXXXX)
。
例如。 {0 ARRAY(xxxxxx), 0 'xx', 1 'xx', ...}
为什么会这样?
如何才能正确完成此操作?
答案 0 :(得分:4)
如果您启用warnings
,您将获得以下内容:
Scalar value @Temp[0] better written as $Temp[0]
如果要按值传递引用的数组,则必须取消引用它:
@handOne = $cardFactory->createHand( @{ $Temp[0] } );
答案 1 :(得分:2)
sub createHand
{
my $self = shift;
my ($temp) = @_;
my @arrayOfCards;
foreach(@$temp)
{
my $value = substr($_,0,1);
my $color = substr($_,1,1);
push(@arrayOfCards,new Card($value,$color));
}
return @arrayOfCards;
}
另请注意,@ temp [0]是需要标量(数组引用)的数组切片,因此最好说出正确的意图:
@handOne = $cardFactory->createHand($temp[0]);
答案 2 :(得分:1)
您正在传递引用而不是值。
my @temp = $lineParser->parseLine($_);
@handOne = $cardFactory->createHand($Temp[0]);
@handTwo = $cardFactory->createHand($Temp[1]);
因此简而言之,在传递参数时将@temp[0]
更改为$temp[0]