免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6411 | 回复: 8
打印 上一主题 下一主题

How to modify @INC variable... [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-20 22:02 |只看该作者 |倒序浏览
@INC 是Perl裡面相當重要的library path的var..
一般是建議不要將這個變數做任何更動..不然可能某些
function不能使用..

因此如果要用自己寫的module...可以使用
use lib '/xxx/xxx/xxx'
use ABC;
使用ABC module...

但是有時候你可能不想這麼麻煩,那麼有幾個方法各位可以試試:
1. perl -I/xxx/xxx/xxx test.pl
  如此/xxx/xxx/xxx這個目錄就會被放進@INC中..
2.定義Env variable PERL5LIB..把你的directory 定義在這個變數中..
3.直接在程序中..使用@INC這個變數..
unshift(@INC,"/xxx/xxx/xxx";

最近在K Advance Perl Programming..有些技巧不錯..
其他以後再做介紹...

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-01-24 00:09 |只看该作者

How to modify @INC variable...

感谢极了

论坛徽章:
0
3 [报告]
发表于 2003-03-20 14:18 |只看该作者

How to modify @INC variable...

为什么设不对???

use lib '/apps/hp11-64/perl5.6/lib/5.6.0';
unshift(@INC,"/apps/hp11-64/perl5.6/lib";

上面两行我都试过了.
为什么呀?
程序还是到/opt/目录下去找.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-03-20 15:37 |只看该作者

How to modify @INC variable...

請上CPAN將POSIX的module抓回來...
untar後..利用
perl Makefile.PL
make;
make install;
安裝...
照你這種情形..表示POSIX需要compile過才行..
不過大部分的module..都可以直接用..
還有一個更直接的方法,請將POSIX直接copy到
@INC所列出來的目錄下試試看..如果還是不行..
你就要照著上面提到的方法...去做...
Try it..

论坛徽章:
0
5 [报告]
发表于 2008-09-05 13:59 |只看该作者
3.直接在程序中..使用@INC這個變數..
unshift @INC,"/xxx/xxx/xxx";

这样写是有问题的吧
因为unshift是在runtime的时候进行的,所以compile的时候就会出错
应该用BEGIN块包一下

  1. BEGIN {
  2. 3.直接在程序中..使用@INC這個變數..
  3. unshift @INC,"/xxx/xxx/xxx";
  4. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2008-09-05 15:14 |只看该作者

回复 #5 churchmice 的帖子

好像是这样的

论坛徽章:
0
7 [报告]
发表于 2008-09-08 12:16 |只看该作者

回复 #5 churchmice 的帖子

我来跟一篇
How to modify @ISA  

论坛徽章:
0
8 [报告]
发表于 2008-09-08 13:57 |只看该作者

回复 #7 xiaoshengcaicai 的帖子

什么意思?

论坛徽章:
0
9 [报告]
发表于 2009-09-07 00:36 |只看该作者
churchmice 说的对,放在BEGIN里边才对,而且这是最灵活的。
我做了静态编译的mysqlclient和DBI模块,但perl各个版本并不能使用同一个,所以用了上边的用法,这是开头部分。

#!/usr/bin/perl

use FindBin qw($Bin);

BEGIN {
    my $arch = `/bin/uname -p`;
    if ( $arch =~ 'x86_64' ) {
        unshift( @INC, "$Bin/lib/5.8.8-64bit" );
    }
    else {
        if ( $] eq '5.008008' ) {
            unshift( @INC, "$Bin/lib/5.8.8" );
        }
        elsif ( $] eq '5.008006' ) {
            unshift( @INC, "$Bin/lib/5.8.6" );
        }
        else {
            unshift( @INC, "$Bin/lib/5.6.1" );
        }
    }
    unshift( @INC, "$Bin/lib" );
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP