A-A+

为@INC添加自定义模块

2014年02月19日 Programming 暂无评论

刚接触perl,在测试自定义包的时候,会遇到这样的错误提示:
[perl]
use strict;
use warnings;

use Foo::Module;
[/perl]
[bash]
Can't locate Foo/Module.pm in @INC (@INC contains:
/usr/local/lib/perl/5.8.8
/usr/local/share/perl/5.8.8
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.8
/usr/share/perl/5.8
/usr/local/lib/site_perl
.).
BEGIN failed--compilation aborted.
[/bash]

其实不管是java(找不到class),或python(找不到.py),对于自定义模块都有类似的问题。思路都是一样的,无非解决方式的细节存在差异,所以原理就不赘述了,直接上解决方案:

  1. 有root权限就直接安装,一劳永逸
  2. 大部分时候,比如公司的机器,没有root,那么只能在外部引导perl解释器去找非标准路径了。
    [bash]
    export PERL5LIB=/path/to/Foo/Module
    echo $PERL5LIB
    [/bash]
    优点是不修改源代码,对于第三方代码的使用尤为合适;缺点是依赖环境变量在发布的时候总是有点狗血,如果是测试也就无所谓了。
  3. 在代码里写死包路径:
    [perl]
    use lib '/path/to/Foo/Module';
    use Foo:Module;
    [/perl]
    注意:写绝对路径确保发布的时候不坑爹;缺点也是显而易见的,需要改代码,如果还是别人的,赫赫...
  4. [bash]perl -I /path/to/Foo/Module xxx.pl[/bash]
    注意:-I(是大写的i不是l,不知道博客的字体是不是看得清楚);-I选项需要在执行文件之前指定(我测试的版本是这样,其他版本不知)

anyway,一个问题N种解决方案是perl的传统,应该还有其他M种方法。本文只涉及最符合常人理解的、不晦涩的方案。

原创文章,转载请注明: 转载自腾讯游戏DBA团队

本文链接地址: 为@INC添加自定义模块

文章的脚注信息由WordPress的wp-posturl插件自动生成

标签:
Copyright © 腾讯游戏DBA团队 保留所有权利.  

用户登录

分享到: