Perl中使用foreach循环数组的简单问题

3

这是一个非常简单的Perl问题,但让我感到困惑。

foreach $val (@{$obj->something()}) {
    # 这个可以工作
}
@array = $obj->something(); foreach $val (@array) { # 这个不行 }

我需要做什么才能使第二个代码块工作(即分配数组),我已经使用了第一种形式,但真的不知道它有什么不同。

1个回答

9

很可能:

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

从第一个例子来看,$obj->something() 看起来返回的是一个数组引用,你需要对其进行解引用。

另外,你应该使用 use strict;use warnings;,并且像这样声明你的变量:

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

这将使查找错误变得更加容易(尽管可能不是这个错误),即使在一个三行的脚本中也是如此。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接