加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl中包(package)的概念

发布时间:2020-12-16 00:15:51 所属栏目:大数据 来源:网络整理
导读:? ?? ?? package mypack;? 包文件的起始语句 此语句定义一个名为mypack的包,从此以后定义的所有变量和sub的名字都存贮在该包关联的符号表中,直到遇到另一个package语句为止。 ???? 包文件——包是面向对象的概念 #!/usr/bin/perl package xxx;???????????

?


?? ??package mypack;? 包文件的起始语句
此语句定义一个名为mypack的包,从此以后定义的所有变量和sub的名字都存贮在该包关联的符号表中,直到遇到另一个package语句为止。

????包文件——包是面向对象的概念

#!/usr/bin/perl
package xxx;??????????? package指令创建“类”;

sub ...???????????????? 创建sub就是创建“类”的“方法”
sub ...
sub ...

1;??? 包文件结尾要retrun 1



???包(类)引用:

&mypack'printval();

在包mypack外调用包内sub

$mypack'line=10;
or
$mypack::line=10;

在包mypack外调用包内变量

perl5中建议$mypack::var
单引号引用的方式仍然支持,但将来的版本中未必支持


???
???perl文件缺省包——main包

#!/usr/bin/perl

$i=0;

sub gotest {

}??

?等价

#!/usr/bin/perl
package main;
$i=0;

sub gotest {

}


?
????如果在程序里package了其它的包,当你想切换回去使用缺省的符号表,可以重新指定package main;
??? 这样,接下来的程序就好象从没定义过包一样

??? 包文件和模块文件都是.pm

其中模块文件,文件名必须与package 名相同


????? 在程序里可以随时在包间来回切换

1: #!/usr/local/bin/perl
2:
3:?package pack1;
4:?$var = 26;
5: package pack2;
6: $var = 34;
7:?package pack1;
8:?print ("$varn");

$ ./tip.pl
26
$


????在Perl 5中,可以用package;??? 指定无当前包,这时,所有的变量必须明确指出所属包名,否则报错

package;???
$var = 21;

?#error - no current package

? 改正

package;?
$mypack::var = 21;


???包造成的私有变量和方法:保证包的变量不可在其它地方使用,这样的数据即为私有数据

1 :?package privpack;
2 :?$valtoprint = 46;
3 :
4 : package main;
5 : # This function is the link to the outside world.
6 : sub printval {
7 :?? &privpack'printval();??
8 : }
9 :
10:?package privpack;
11: sub printval {
12:?? print ("$valtoprintn");???只有同一个包中,才能“直接”调用此变量,其他包中调用此变量要带::前缀或切换package ...
13: }
14:
15: package main;

16: 1;?

?

?

大部分perl程序员遵循以下两条规则:

1.perl脚本(.pl)必须不能包含包的声明

2.perl模块(.pm)必须只能声明一个包,并且对应模块的名字和位置。例如?moduleDemo/StringUtils.pm必须以Demo::StringUtils包名开始。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读