设为首页 收藏本站
查看: 1019|回复: 0

[经验分享] perl中包(package)的概念

[复制链接]

尚未签到

发表于 2018-8-31 08:20:48 | 显示全部楼层 |阅读模式
  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 ("$var\n");
  $ ./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 ("$valtoprint\n");   只有同一个包中,才能“直接”调用此变量,其他包中调用此变量要带::前缀或切换package ...
  13: }
  14:
  15: package main;
  16: 1;
  大部分perl程序员遵循以下两条规则:
  1.perl脚本(.pl)必须不能包含包的声明
  2.perl模块(.pm)必须只能声明一个包,并且对应模块的名字和位置。例如 moduleDemo/StringUtils.pm必须以Demo::StringUtils包名开始。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-559106-1-1.html 上篇帖子: perl中模块的概念(基础) 下篇帖子: Perl的特殊符号
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表