需要知道以下代码的工作原理

时间:2016-10-20 20:14:44

标签: perl

foreach my $x (@A) {  # read: "for each element x in array A ..."
    if ( ! ($f->($x)) ) {
        $answer = 0;
    }
}

我遇到了这些代码。 f似乎是一个函数,用于检查数组中是否有任何负值,返回false,如果所有值都为true,则返回true。但我没有得到函数f如何做到这一点。

2 个答案:

答案 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