是在our
修改仅使用时严格编译激活使用全局变量,让或者甚至用于从正常的全局变量不同,当是严格了一些额外的功能?Perl中定义的变量和正常的全局变量之间是否有区别?
7
A
回答
5
是,our
声明可以有附加功能。但这些在很大程度上是无关紧要的。
our
创建一个词汇别名一个全局变量(同名)。也就是说,在package Foo
中,our $bar
和$Foo::bar
指的是相同的变量。但是,前者只能在紧密的词汇范围内使用。
由于our
有词法效果,别名也可以阴影词法变量与my
:
our $foo = 42; # give some value
my $foo = -1; # same name, different value
say "my gives $foo";
our $foo; # reintroduce the alias; shadow lexical
say "our gives $foo";
如果剥去our
声明和没有严格的运行它,这显然不会给输出
my gives -1
our gives 42
就像my
,our
可以采取一些额外的声明语法,例如属性:
use threads::shared;
our $foo :shared;
您还可以指定一个类型与fields
编译用法:
our Foo $foo;
这不能为全局变量来完成,而不our
。
2
正如可以从perldocs看到,our
创建别名具有相同名称作为在当前包的 ED our
可变包变量。
如果你在写,在它有多个包定义代码,你可以使用一个our
ED变量传递模块之间的别名的变量。
package Foo:
our $bar = 42; # $bar is an alias for $Foo::bar
package Baz;
print $bar; # prints '42', since $bar is $Foo::bar
因此,与全局变量无关的用法。
2
全球,包变量是随时随地访问,strict
是否到位与否,如果您指定的完全限定名称,即你的包名前缀它。所以我可以随时随地访问$main::variable
。
没有strict
,如果你访问$variable
,你还没有用my
声明,Perl认为它是当前包中的包变量。 our
可以用来显式声明包变量,但没有strict
它并没有做太多的事情未申报的工作方式。
随着strict
的到位,在声明出现的词法范围内,使用our
声明的变量可以使用它们的本地名称以及它们的完全限定名称进行访问。这意味着要从两个子例程访问一个全局变量,您必须在两个子例程中声明它,或者在两个子例程之前声明它。当有未申报的全局相比
相关问题
- 1. JavaScript中的局部变量和全局变量之间的区别?
- 2. **变量和变量[] []之间的区别?
- 3. 推断全局和超全局变量之间的正确区别PHP
- 4. 非局部变量和全局变量有什么区别?
- 5. 初始化全局常量变量是否安全?定义?
- 6. 局部变量和全局变量的区别
- 7. 属性和全局变量之间的区别[objective-c]
- 8. 静态和全局变量之间的区别
- 9. Java中静态变量和全局变量的区别
- 10. Railo中的var和局部范围变量之间是否有明显区别?
- 11. c中全局变量和堆变量之间的区别和相似之处是什么?
- 12. javascript正常变量和带美元符号的变量之间的区别
- 13. Python:全局变量与前缀为“self。”的变量与局部变量之间有什么区别?
- 14. 最终变量和编译时间常量之间的区别
- 15. PLSQL绑定变量和主机变量之间的区别
- 16. 静态变量和全局变量(Java)有什么区别?
- 17. TypeScript - 私有变量和受保护变量之间的区别
- 18. 定义全局变量在Perl与`strict`
- 19. 静态方法中的正常和静态局部变量之间是否有区别?
- 20. c中的全局变量和静态变量之间的差别
- 21. Perl变量声明中的$,@,%之间有什么区别?
- 22. 类别级别定义的类别变量和变量之间的区别是什么
- 23. Python。 unicode +变量和u +常量之间的区别?
- 24. Ruby - 变量和@variable之间的区别
- 25. perl的全局enviornment变量
- 26. 区别:%% a和%variable%变量之间的区别是什么?
- 27. 变量===常数和常量===变量有什么区别
- 28. CakePHP 3:定义全局变量变量
- 29. Ruby的类变量和实例变量之间的区别
- 30. 在主机软件的dll和全局变量中定义的全局变量
真的很好的答案! – none