2010-10-14 171 views
1

我再次忘記了如何讓$_表示一個數組,當它處於一個二維數組的循環中時。如何從Perl中的二維數組中提取數組?

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

這就是意圖,但這並不奏效。什麼是正確的方法來做到這一點?

+0

你能告訴你開始用數據,並要使用結束了,即使在僞什麼? – 2010-10-14 21:44:57

回答

5

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

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

$_將陣列引用(不陣列),所以你需要取消對它的引用爲:

my @ARRAY = @$_; 
相關問題