[Perl Module] perl的模块笔记

Sep 5th, 2009

转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2009/09/05/perl%e7%9a%84%e6%a8%a1%e5%9d%97%e7%ac%94%e8%ae%b0.html

Perl中重复使用的代码的基本单位.

模块分二种风格:传统的和面向对象的.
传统风格的模块:为调用者导入和使用定义的子例程和变量.
面象对象风格的模块:以类来调用.
所以模块有二种方法来给它的接口提供给程序来使用:导出符号,要不就是允许方法调用.

模块的加载
编译时时行一次预装载,然后给需要的符号输入进来,这样编译后,在运行时就可以使用这些模块中的符号(子例程和变量). 注意如果没有提供所需要的符号LIST(列表),那么就使用模块中内部的@EXPORT数组中命名的符号.如果提供了这个列表,还需要在模块本身有的 @EXPORT要不@EXPORT_OK数组中提级.

模块的名字
除非模块的作用是起pragma的作用,不然,建议名字第一个字母大写.

require和use的分别
   require会给告诉编译器,有关"MODULE"的间接对象符号的表达式都是模块调用,不是函数调用.另外,require是运行时才会引入门
   use是在编译时就引入,所以当use一个模块时,他本身所有的代码都需要执行.use声明时,其实隐含了一个BEGIN块,编辑器会见到声音就装载这个模块,并运行其中任何可执行的初始化代码.然后才编译接下的文件.这也是pragma怎么改变编译器行为的方法

基本模块样例

   packageBestiary;
   require Exporter;

   our @ISA = qw(Exporter);
   our @EXPORT = qw(camel); #默认导出的符号
   our @EXPORT_OK = qw($weight); #按要求导出的符号
   our %EXPORT_TAGS = (camel => [qw(camel $weight)]); #导出时的符号组
   our $VERSION = 1.00;

   SUB CAMEL {PRINT "TEST"};
   $weight = 1024;
   1;


@EXPORT数组包含默认导出的变量和函数的名字,当use packagename时就会得到的东西,@EXPORT_OK中的变量和函数只有当程序中use语句中特别要求时才会导出.最 后%EXPORT_TAGS中的键值对允许程序包含那些在@EXPORT和@EXPORT_OK中列出的特定的符号组.如果不想外面的模块导出什么,可以 使用@EXPORT_FAIL来实现

符号组因为一定需要出现在@EXPORT和@EXPORT_OK中,所以perl提供了二个函数来处理

   %EXPORTER_TAGS = (foo => [qw(aa bb cc)],bar => [qw(aa cc dd)]);
   Exporter::export_tags('foo');         #给aa,bb和cc导入到@EXPORT
   Exporter::export_ok_tags('bar');      #给aa,cc和dd导入到@EXPORT_OK
Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
Tags: ,
No comments yet.