首页 新闻 会员 周边 捐助

perl 顺序

0
[已解决问题] 解决于 2025-08-08 10:20

1 sub outer_func {
2 my $name = "Perl-ista";
3 sub inner_func { # 注意:Perl 里 sub 后的名字必须是裸字,不能带 $
4 print "Hello, $name!\n";
5 }
6 inner_func(); # 裸字调用
7 }
8 outer_func();

一、执行顺序
8 → 1(进入 outer_func) → 2 → 5(编译阶段早已完成,这里什么都不做) → 6 → 4 → 4 返回 → 6 返回 → 7 返回 → 8 结束。
二、函数绑定的时间
• outer_func:在 编译阶段 就被解析并绑定到当前包的符号表(main::outer_func),代码尚未运行即已存在。
• inner_func:同样在 编译阶段 被解析并绑定到当前包的符号表(main::inner_func)。
因此无论 outer_func 被调用多少次,inner_func 始终只有一份,不会像 Python 那样每次调用都重新创建一个新的闭包。变量 $name 在 inner_func 中按正常词法作用域规则可见(Perl 的 “static binding”)。

_java_python的主页 _java_python | 小虾三级 | 园豆:738
提问于:2025-08-08 08:14
< >
分享
最佳答案
0

perl是:•
inner_func:同样在 编译阶段 被解析并绑定到当前包的符号表(main::inner_func)。
可能有的文章说是运行时绑定其实都无所谓,因为它是闭包是根据槽号来的,运行时绑定和编译时板顶到全局符号表(包符号表),不会改变的,因为字节码一样,一次运行,inner_func函数对象就确定了,不会再创建了;

而python的inner_func是根据变量来的,字节码不固定,函数对象运行时确定

_java_python | 小虾三级 |园豆:738 | 2025-08-08 10:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册