如何从Perl中的二维数组中提取数组?

问题描述:

我再次忘记了如何让$_表示一个数组,当它处于一个二维数组的循环中时。如何从Perl中的二维数组中提取数组?

foreach(@TWO_DIM_ARRAY){ 
    my @ARRAY = $_; 
} 

这就是意图,但这并不奏效。什么是正确的方法来做到这一点?

+0

你能告诉你开始用数据,并要使用结束了,即使在伪什么? – 2010-10-14 21:44:57

线my @ARRAY = @$_;(而不是= $_;)是你在做什么寻找,但除非你明确地想要复制引用的数组,否则我会直接使用@ $ _。

嗯,其实我不会用$_可言,特别是因为你很可能想通过@$_迭代,然后在内部循环使用隐$_一样,那么你可以有一个烂摊子搞清楚其中$_是哪个,或者甚至是合法的。这可能是你首先复制到@ARRAY的原因。

无论如何,这里就是我会做:

for my $array_ref (@TWO_DIM_ARRAY) { 

    # You can iterate through the array: 
    for my $element (@$array_ref) { 
     # do whatever to $element 
    } 

    # Or you can access the array directly using arrow notation: 
    $array_ref->[0] = 1; 
} 
+1

为我的$ var语法+1。似乎很多人不会为此烦恼,尽管它提高了可读性。 – Sorpigal 2010-10-14 10:27:30

+0

不过,为什么不能这样工作:foreach(@TWO_DIM_ARRAY){print join',',@ {$ _}; }毕竟,$ _是一个数组引用,@ {$ _}应该是一个数组。 – 2010-10-23 16:57:40

+0

@Michael Goldshteyn:那也可以。 '@ {$ _}'与'@ $ _'相同。例如,我只是试过这个:'我@A =([1,2,3],[4,5,6],[7,8,9]); foreach(@A){print join(“,”,@ {$ _}),“\ n”; }' – Jander 2010-10-23 19:27:25

for (@TWO_DIM_ARRAY) { 
    my @arr = @$_; 
} 

$_将阵列引用(不阵列),所以你需要取消对它的引用为:

my @ARRAY = @$_;