Perl模块的隐私、符号导入及相关特性解析
1. Perl模块的隐私特性
在Perl中,符号的访问较为自由,并不强制实施隐私机制。在线文档形象地描述:“Perl不像C++、Ada或Modula - 17等语言那样强制划分模块的私有和公共部分。Perl并不痴迷于强制隐私,它更希望你因为没被邀请而不进入它的客厅,而非它拿着猎枪阻止你。”
一个包不仅可以访问其他包的现有变量或子例程,还能轻松地在其他包的命名空间中创建新名称。例如:
package Test;
# Create a variable subroutine and subroutine in another package
$main::foo = 10;
sub main::myFunc {
print "Hello \n";
}
package main;
myFunc(); # prints "Hello"
虽然在常规应用中这样做不太合适,但如果加以控制,这种功能也能发挥作用,比如将外部包的符号名称导入到自己的命名空间。
1.1 强制实施隐私
- 私有变量 :可以使用
my
操作符在文件作用域创建不可侵犯的私有变量。由于这些变量与包没有关联,所以不能从不同的作用域(这里指文件作用域)访问。不过,它们最多受限于文件边界。示例如下:
package A;
my $a = 10; # A