最开始使用perl模块的时候
为了加载模块,是把模块进行安装。这种方式太繁琐,不是好方法。
只要关注perl模块里的*.pm文件即可。利用@INC。
以前加载模块@INC时的写法,好像有些问题
cpan lwp
会自动下载lwp模块,其所需的文件,并安装。
如果提示@INC,不包含目录的信息。就在代码中手动设置。如下例所示:
#!/usr/bin/perl
use strict;
use warnings;
push(@INC,"d/tools/perl/perl-study/perl5");
use LWP;
注意:
这样的写法,有的机器能正常启动模块,有的不行。建议不要这样写。文章最后的写法可以通用。
@INC
perl中的INC变量中包含了所有的perl module的查找路径。
可以使用perl -V 来查看INC的值。
1)默认地INC如下:
@INC:
C:/Perl/site/lib
C:/Perl/lib
.
2)设置环境变量PERL5LIB来增加到INC,例如:
set perl5lib=c:\perllibs
在设置perl5lib后如下,
%ENV:
PERL5LIB="c:\perllibs"
@INC:
c:\perllibs
C:/Perl/site/lib
C:/Perl/lib
.
3)在perl程序中修改INC, 例如:
#!/usr/bin/perl -w
BEGIN{push(@INC,"/home/test")};
或者
#!/usr/bin/perl -w
use lib '/home/test';
个人推荐的@INC
的路径加载方法:
下述写法,是网上介绍的。但是发现@INC的路径没有加载成功。
#!/usr/bin/perl -w
push(@INC,"/home/test");
解决办法:
我们需要使用BEGIN块在编译时向@INC中添加值,此时是perl检查模块的时刻。
BEGIN { push @INC, '/my/dir' };
# or
BEGIN { unshift @INC, '/my/dir' };
# or
use lib '/my/dir';
如果你等到程序被编译的时候就晚了,perl会会提示一个异常,
“在@INC中无法找到XXX”.
Can’t locate XXX in @INC
编写简单模块的模板
#!/usr/bin/perl
use strict;
use warnings;
package packagename
#require Exporter;
#our @ISA=qw(Exporter);
#our @EXPORT=qw(subname1 subname2 subname3 $varname1 $varname2);
#our @version=1.0;
sub subname1 {
.....
}
1;
说明:
1. 下述四行代码使用的话,在use packagename之后,函数调用而已不用指明packagename,即subname1()
;
2. 否则,在use packagename之后,函数调用需要用指明packagename,即packagename::subname1()
;
#require Exporter;
#our @ISA=qw(Exporter);
#our @EXPORT=qw(subname1 subname2 subname3 $varname1 $varname2);