14
A
回答
11
本地($ X)节省掉全局变量$ x的旧值和 分配的子程序的持续时间是从子程序调用的其他功能 可见一个新值。这在运行时完成 ,所以称为动态作用域。 local()总是影响全局变量,也称为包变量或动态变量。
my($ x)创建一个新变量,该变量仅在当前的 子例程中可见。这是在编译时完成的,所以它被称为词法或静态作用域。 my()总是影响私有变量,也称为 词法变量或(不正确)静态(范围)变量。
在Perl-FAQ's看看:
8
my
创建一个局部变量。local
没有。
3
我会添加一个快速示例。
$var = "Global";
sub inner {
print "inner: $var\n";
}
sub changelocal {
my $var = "Local";
print "changelocal: $var\n";
&inner
}
sub changedynamic {
local $var = "Dynamic";
print "changedynamic: $var\n";
&inner
}
&inner
&changelocal
&changedynamic
这给出以下输出(添加注释)。
inner: Global # Finds the global variable.
changedynamic: DynamiC# Dynamic variable overrides global.
inner: DynamiC# Find dynamic variable now.
changelocal: Local # Local variable overrides global.
inner: Global # The local variable is not in scope so global is found.
您可以将动态变量想象为掩盖您调用的函数的全局。词汇作用域变量只能从最近的大括号内的代码中看到。
相关问题
- 1. 本练习中的静态和动态范围界定有什么区别?
- 2. 范围和连接有什么区别?
- 3. c + +动态绑定和java动态绑定有什么区别?
- 4. Angular:'='和'=?'有什么区别而在指令定义范围
- 5. Perl中'for'和'foreach'有什么区别?
- 6. Perl中的'eq'和'=〜'有什么区别?
- 7. Perl中grep和map有什么区别?
- 8. ()和[]动态分配有什么区别?
- 9. “perl test.pl”和“./test.pl”有什么区别?
- 10. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什么区别?
- 11. 安装Rubygems“本地”和“系统范围”有什么区别?
- 12. 春季请求和会话范围有什么区别?
- 13. 有什么区别:超出范围和:无效?
- 14. “使用”和范围界定之间的区别?
- 15. JPA和JDO规范有什么区别?
- 16. 在PlayN Graphics界面中,height和screenHeight方法有什么区别?
- 17. 有什么区别bettwen静态和动态变量在C#中?
- 18. 动态链接器和动态加载器有什么区别?
- 19. 动态和虚拟方法有什么区别?
- 20. 问题关于静态和动态范围界定问题
- 21. 静态方法和非静态方法有什么区别?
- 22. 有什么区别`和$(Bash中有什么区别?
- 23. 我认为C#具有词法范围,但为什么这个例子显示动态范围行为?
- 24. 流畅的界面和方法链之间有什么区别?
- 25. 算法和方法有什么区别
- 26. 静态SQL和动态SQL有什么区别?
- 27. 动态和静态生成的grpc代码有什么区别?
- 28. 静态单元格和动态原型有什么区别?
- 29. 为什么ruby方法不具有词法范围?
- 30. 信号量和临界区域有什么区别?
非常感谢你 – Anil
“my($ x)创建一个只在当前子程序中可见的新变量”。那是不正确的。 'my'创建一个只在当前*代码块*中可见的新变量。一个子程序只是一个块的一个例子。你在'local'的定义中出现类似的错误。 –
@ O.D http://perldoc.perl.org/perlsyn.html#Basic-BLOCKs – TLP