使用perl将数组的数组传递给子例程

时间:2013-12-07 06:29:51

标签: arrays perl subroutine addressing

好的,所以我得到了一个数组(AoA)数组,我需要将它传递给子程序,然后访问它。这有效......但它是否严格正确,确实有更好的方法可以做到这一点吗?

#!/usr/bin/perl
$a = "deep";
push(@b,$a);
push(@c,\@b);

print "c = @{$c[0]}\n";
&test(\@c);

sub test
{
    $d = $_[0];
    print "sub c = @{$$d[0]}\n";
}

由于

2 个答案:

答案 0 :(得分:3)

最好的方法是use strict;use warnings;并在使用之前声明变量。

此外,您知道为您的变量ab命名是不好的做法 - 给它们提供有意义的名称,特别是因为例如$a变量是由编译器定义的(与sort {} @一起使用的那个)。

答案 1 :(得分:1)

use strict;          # Always!
use warnings;        # Always!

sub test {
    my ($d) = @_;
    print "$d->[0][0]\n";

    # Or to print all the deep elements.
    for my $d2 (@$d) {
       for (@$d2) {
          print "$_\n";
       }
    }
}

{
   my $a = "deep";   # or:  my @c = [ [ "deep" ] ];
   my @b;
   my @c;
   push(@b,$a);
   push(@c,\@b);
   test(\@c);        # Can't pass arrays per say, just refs. You had this right.
}

还需要更好的名字。特别是,应避免使用$a$b,因为它们可能会干扰sort