【发布时间】:2014-07-15 08:36:38
【问题描述】:
这是如何工作的?
use strict;
use warnings;
sub base {
my $constant = "abcd";
my ($driver_cr) = (@_);
&$driver_cr;
}
base(sub {print $constant});
换句话说,$driver_cr 如何在没有以下条件的情况下访问 $constant:
- 将 $constant 作为参数传递给驱动程序
&$driver_cr($constant) - 将 $constant 的范围更改为全局
our $constant = "abcd"; -
制作一个公共块并从基础移动 $constant:
use strict; use warnings; { my $constant = "abcd"; sub base { my ($driver_cr) = (@_); &$driver_cr; } base(sub {print $constant}); }
【问题讨论】:
-
它不起作用。它将因“全局符号“$constant”需要显式包名称而死去
-
对,那怎么处理呢?
-
您到底想完成什么?为什么不将
$constant作为参数传入? -
因为我有很多 $constants(状态)和驱动程序(访问者)应该能够在不通过 args 传递所有内容的情况下启动并完成工作。
-
@name,所以只需传递一个包含所有内容的 hashref。
标签: perl lambda closures dynamic-scope