如何从子例程引用创建Perl词法作用域子例程?
从引用构建Perl词法作用域子例程的方法
你提到的词法作用域子例程定义方式是可行的:
use feature qw( lexical_subs ); { my sub foo { ... } # 此代码可调用`foo`。 } # 此代码无法调用。
针对你问的「是否存在从引用构建词法作用域子例程的方法」,答案是肯定的——在Perl 5.26及更高版本中,结合lexical_subs特性,你可以直接将代码引用赋值给词法子例程,语法如下:
use feature qw( lexical_subs ); { # 直接从匿名子例程赋值 my sub foo = sub { print "调用词法子例程foo\n"; }; foo(); # 可以直接像普通子例程一样调用 # 从已有的代码引用变量赋值 my $coderef = sub { print "调用词法子例程bar\n"; }; my sub bar = $coderef; bar(); # 同样支持直接调用 } # 此处无法调用foo或bar,符合词法作用域规则
你之前尝试的refaliasing写法之所以无效,是因为my \&foo = sub { ... };本质是创建了一个词法的子例程别名,而非定义词法子例程。这种方式下,你需要通过&foo()或$foo->()来调用,无法直接用foo()的形式,因此不符合你的需求。
内容的提问来源于stack exchange,提问作者ikegami
相关产品推荐
相关产品推荐

