【问题标题】:Passing a two-dimensional array to sub routine perl [duplicate]将二维数组传递给子例程perl [重复]
【发布时间】:2017-04-20 04:17:17
【问题描述】:

我有这个数组:

print ("Grade\n");
        for (my $j=0; $j < $size; $j++){
            for (my $i=0; $i < $sizeCol; $i++){
                print("$newMatrizGrades[$j][$i] ");
            }
            print ("\n");
        }

newSubject ($name,@newArrayNames,@newMatrizGrades);
}

在印刷品上,我可以看到元素。但是当我在例行程序中时。以这种方式访问​​数组 $[$sizeNewArrayName] ,我得到一个地址而不是值。 @newArrayNames 是一个一维数组,我可以访问元素 $[1],$[2],...,$[$sizeNewArrayName],没有其他问题.有人可以帮助我吗?

【问题讨论】:

  • 查看此链接...stackoverflow.com/questions/5680147/… 应该可以帮助您...您必须取消对数组的引用
  • 您不能将数组传递给 subs。你所拥有的相当于newSubject($name, $newArayNames[0], $newArayNames[1], ..., $newMatrizGrades[0], $newMatrizGrades[1], ...) 传递对数组的引用。

标签: perl multidimensional-array subroutine


【解决方案1】:

Perl 将子例程参数混合成一个长列表(因此无法识别单独的列表/数组变量),因此在这种情况下,您需要发送对数组的引用,然后在子程序中取消引用它们去使用它们:

use warnings;
use strict;

newSubject($name, \@newArrayNames, \@newMatrizGrades);

sub newSubject {
    my ($name, $names, $grades) = @_;

    for (@$names){
        # do something
    }

    print "$grades->[0][0]\n";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2012-05-30
    • 2013-12-24
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多