perl加载模块,曾经走过的弯路。

最开始使用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);
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值