如何从子引用创建一个词法作用域的子程序
可以按如下方式定义一个词法作用域的子程序:
use feature qw( lexical_subs );
{
my sub foo {
...
}
# This code can call `foo`.
}
# This code can't.
有没有办法从引用构建一个词法作用域的子程序?
我以为(目前处于实验阶段的)refaliasing功能可能就是那条路。
use feature qw( lexical_subs refaliasing declared_refs );
my \&foo = sub { ... };
这行不通,我尝试的任何变体也都不行。
解决方案
你可以使用
use feature qw( lexical_subs refaliasing );
my sub foo;
\&foo = sub { ... };
测试:
use strict;
use warnings;
use feature qw( say lexical_subs );
use experimental qw( refaliasing );
sub foo { say "outer"; }
for my $x ( 1 .. 2 ) {
my sub foo;
\&foo = sub { say "inner ($x)" };
foo();
}
foo();
输出:
inner (1)
inner (2)
outer
显然,直接使用 my sub foo { say "inner ($x)" } 就能达到同样的效果,但 sub { ... } 可以被一个更复杂、返回coderef的表达式所替代。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。