2010-11-11 121 views
3

真的很简单的perl问题,但让我很困惑。perl foreach循环数组,简单问题

 
foreach $val (@{$obj->something()}) { 
    # this works 
} 

@array = $obj->something(); 
foreach $val (@array) { 
    # this does not 
} 

什么我需要做的,使第二工作(即:分配seperately数组),我用的第一种形式公平一点,但并不真正了解它做什么不同。

回答

8

大概:

@array = @{$obj->something()}; 

从第一个例子,它看起来像$obj->something()返回数组引用,则需要取消对它的引用。

另外,你真的应该use strict;use warnings;,并宣布像

my @array = @{$obj->something()}; 
foreach my $val (@array) { 
    # this does not 
} 

的变量这将使它更容易找到错误(虽然可能不是这一个),甚至在三线脚本。

+0

完美,欢呼声。 – Sirex 2010-11-11 10:41:20