当您将数组的名称存储为另一个数组的元素时,如何访问Perl中的数组元素?

时间:2014-01-07 08:16:56

标签: arrays perl element

假设我有这段代码。

它有一个数组'arr'存储其他数组的名称,如'et','rt'等......

    #!/usr/bin/perl
    $\="\n";
    @arr = ("$et", "\$rt", "\$ee", "\$re", "\$ec", "\$epc", "\$rc", "\$rpc", "\$euc", "\$ruc", "\$ekc", "\$rkc");
    @et = (100, 1000, 1100, 1200, 200, 300, 400, 500, 600, 700, 800, 900);
    .
    .
    .

和其他数组rt,ee类似定义..

如何访问说$ et [2]?我已经尝试了$ arr [0] [2],$($ arr [0])[2]以及许多其他变体,但似乎没有任何效果。任何解决方案?

2 个答案:

答案 0 :(得分:2)

以这种方式工作是个坏主意。你可能想要的不是存储其他数组的名称,而是存储它的名称,例如

my @et = ( 100,1000,1100,1200,... );
my @arr = ( \@et,... )

然后你可以使用$ arr [0] [1]从@et访问第二个元素:

  • $ arr [0] - > \ @et(参考@et)
  • $ arr [0] [1] - > @et
  • 的第二个元素

经常你会看到人们写$ arr [0] - > [1],这完全相同,只有2​​个字节:)

答案 1 :(得分:2)

您不使用use strict;(或至少不使用use strict refs;)。

您需要${$arr[0]}[2],但是您可以在"et"中存储简单名称(@arr):

@arr = ("et", "rt",);
@et = (100, 1000, 1100, 1200, 200, 300, 400, 500, 600, 700, 800, 900);

print ${$arr[0]}[2], "\n";
但是,这不是好的风格。你最好使用由'array name'索引的哈希,并将数组(或数组引用)作为与键关联的值:

my %arr = ( "et" => [100, 1000, 1100], "rt" => [200, 2000, 2200] );

print $arr{et}->[2], "\n";