我有这段代码:
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'}
}),
但显然:
全局符号“$ curr”需要显式包名称
(在线$curr->{'product_id'}
)。
答案 0 :(得分:2)
在您的代码中,$curr
在div()
调用(第二个参数)后可见,所以很明显您要在它之前声明它,
for_each($products, sub {
my $curr = $_[0];
div({-class => 'product'}, ...