foreach my $x (@A) { # read: "for each element x in array A ..."
if ( ! ($f->($x)) ) {
$answer = 0;
}
}
我遇到了这些代码。 f
似乎是一个函数,用于检查数组中是否有任何负值,返回false,如果所有值都为true,则返回true。但我没有得到函数f
如何做到这一点。
答案 0 :(得分:3)
您的$f
是代码参考,而不是函数。这意味着它可以像任何其他变量一样传递。它需要一个参数(依次为@A
的每个元素),然后返回一些然后被反转的东西。如果没有看到$f
的定义,我们就无法解释它是如何运作的。
如果您不知道代码中的定义位置,可以使用B::Deparse来查看。只需将其放在foreach
循环上然后运行即可。它将输出用于定义$f
的代码的近似值。
require B::Deparse;
print B::Deparse->new->coderef2text($f);
# foreach ...
答案 1 :(得分:1)
$f
不是函数,它是函数的引用。因此,您循环遍历数组@A
中的每个值,依次将$x
设置为每个值,并使用$x
作为参数指向任何函数$f