我再次忘記了如何讓$_
表示一個數組,當它處於一個二維數組的循環中時。如何從Perl中的二維數組中提取數組?
foreach(@TWO_DIM_ARRAY){
my @ARRAY = $_;
}
這就是意圖,但這並不奏效。什麼是正確的方法來做到這一點?
我再次忘記了如何讓$_
表示一個數組,當它處於一個二維數組的循環中時。如何從Perl中的二維數組中提取數組?
foreach(@TWO_DIM_ARRAY){
my @ARRAY = $_;
}
這就是意圖,但這並不奏效。什麼是正確的方法來做到這一點?
線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;
}
爲我的$ var語法+1。似乎很多人不會爲此煩惱,儘管它提高了可讀性。 – Sorpigal 2010-10-14 10:27:30
不過,爲什麼不能這樣工作:foreach(@TWO_DIM_ARRAY){print join',',@ {$ _}; }畢竟,$ _是一個數組引用,@ {$ _}應該是一個數組。 – 2010-10-23 16:57:40
@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 = @$_;
你能告訴你開始用數據,並要使用結束了,即使在僞什麼? – 2010-10-14 21:44:57