perl:将数组传递给函数的麻烦

时间:2013-05-28 14:23:03

标签: arrays perl

所以我想做的就是将数组传递给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', ...}

为什么会这样?

如何才能正确完成此操作?

3 个答案:

答案 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]