如何引用另一个外部函数的参数?

How do I refer to another outer function's argument?

我有这个代码:

    for_each($products, sub {
        div({-class => 'product'},
            only_if(is_admin(), sub {
                a({-href => 'remove_product.cgi?id='.$_[0]->{'product_id'}}, 'Bla bla bla')
            }),
            img({
                -src => $_[0]->{'picture'},
                -alt => $_[0]->{'description'}
            }),
            ...

这只是相关的部分。 only_if 是一个函数,它接受一个布尔值和另一个函数,只有当布尔值是 true 时才执行该函数;但这无关紧要。

问题在于,在 $_[0]->{'product_id'} 中,它试图获取传递给 only_if 的函数的第一个参数,而不是 "main" 函数(最外层)。

什么是引用外部函数参数的最简洁的方法?

我试过:

    for_each($products, sub {
        div({-class => 'product'},
            my $curr = $_[0],
            only_if(is_admin(), sub {
                a({-href => 'remove_product.cgi?id='.$curr->{'product_id'}}, 'Rimuovi prodotto')
            }),
            img({
                -src => $_[0]->{'picture'},
                -alt => $_[0]->{'description'}
            }),

但显然:

Global symbol "$curr" requires explicit package name

(在线 $curr->{'product_id'})。

在你的代码中 $currdiv() 调用(第二个参数)之后可见,所以很明显你想在它之前声明它,

for_each($products, sub {
    my $curr = $_[0];
    div({-class => 'product'}, ...