我的第一个问题是“什么是包装变量有用?”.我(想)我理解词汇变量是什么,但我不明白包变量的用途或者它们的用法与词汇有何不同,所以我的第二个问题是,’词法和包变量有什么区别?’
解决方法 包变量存在于符号表中,因此根据其名称,可以从任何其他包或范围中读取或修改它.词汇变量的范围由程序文本确定. perlsub联机帮助页中的 “Private Variables via my()”部分提供了有关定义词汇的更多详细信息.假设我们有以下MyModule.pm:
package MyModule;# these are package variablesour $name;$MyModule::calls = "I do not think it means what you think it means.";# this is a lexical variablemy $calls = 0;sub say_hello { ++$calls; print "Hello,$name!\n";}sub num_greetings { $calls;}1;
请注意,它包含一个包$calls和一个lexical $calls.任何人都可以到达前者,但模块控制对后者的访问:
#! /usr/bin/perluse warnings;use strict;use MyModule;foreach my $name (qw/ Larry Curly Moe Shemp /) { $MyModule::name = $name; MyModule::say_hello;}print MyModule::num_greetings,"\n";print "calls = $MyModule::calls\n";
该程序的输出是
Hello,Larry!Hello,Curly!Hello,Moe!Hello,Shemp!4calls = I do not think it means what you think it means.
正如您所看到的,包变量是全局变量,因此所有常见的问题和建议都不适用.除非明确提供访问权限,否则MyModule包之外的代码不可能访问其词法$调用.
经验法则是你几乎总是想要使用词法. Perl Best Practices by damian Conway是直接的:“永远不要让变量成为模块界面的一部分”(强调原文).
总结以上是内存溢出为你收集整理的perl – 什么时候应该使用包变量和词法变量(有什么区别)?全部内容,希望文章能够帮你解决perl – 什么时候应该使用包变量和词法变量(有什么区别)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)