Perl Module
关于Perl module改如何使用,如何编写,现在初步有一些肤浅的体会,
总结如下:
1. 如何引用不在系统默认路径中的module?
方法1:使用lib
use lib qw (/your/path/to/module);
貌似这几乎等价于BEGIN {unshift (@INC, LIST)}
方法2:修改@INC
BEGIN { unshift @INC, '/home/roger/sandbox';}
use job::func;
为什么是unshift,而不是push?因为unshift能把要增加的
项加入到@INC的开头,这样每次搜索@INC时,总是最先找到
刚新加入@INC的目录
2. 如何避免多个路径下同名的module?
方法1:目录命名尽量使用 "公司名/组织名/项目名/" 为前缀
比方说: COMPANY/PROJECT/Test
方法2:使用“::”
use This::function
use That::function
3. use和require
use在编译时运行,require在运行时工作,所以最好使用use,
这样能够尽早发现问题
4. module中导出函数或变量符号
===============================
package Func::Job;
require Exporter;
use vars qw($VERSION @ISA @EXPORT);
@ISA = qw(Exporter);
$VERSION = '0.01';
@EXPORT =qw (init);
sub init
{
...
}
sub execute
{
...
}
===================================
放到@EXPORT中的符号是可以直接调用的,
init();
只要你的perl脚本use了这个module
不在@EXPORT中的符号不能直接调用,但是可以通过界定符迂回完成:
Func::Job::execute()
注意这里使用了Exporter这个module, 任何一个module要导出符号,最好
通过Exporter完成,这需要我们的module继承Exporter的特性,如何继承?
方式1:
package Func::Job;
use base qw(Exporter);
base可以建立继承关系;
方式2:
package Func::Job;
require Exporter;
use vars qw($VERSION @ISA @EXPORT);
@ISA = qw (Exporter);
这类似于
package Baz;
BEGIN {
require Foo;
require Bar;
push @ISA, qw(Foo Bar);
}
Perl module的一些小结收藏
最新推荐文章于 2024-07-07 09:50:20 发布