关于 Perl Modules

From PostgreSQL 中文维基, PostgreSQL 中文站, PostgreSQL 中国社区, PostgreSQL Chinese community

Jump to: navigation, search

[编辑] 如何不安装使用 Perl Modules

  • 使用 Modules
luoyi@darkstar:~/src/dbperl$ ls
blib  t  test.pl
luoyi@darkstar:~/src/dbperl$ perl -Iblib/lib -Iblib/arch t/examples.t
1..7
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
luoyi@darkstar:~/src/dbperl$

Perl Module 编译好以后,.pm 文件放在 blib/lib 中,.so 文件放在 blib/arch 中,因此加上两个 -I 参数就可以不用安装,直接使用了。

  • 察看 Modules 帮助
luoyi@darkstar:~/src/dbperl$ env PATH=`pwd`/blib/lib/:$PATH perldoc BerkeleyDB

perldoc 会从 PATH PERL5LIB PERLLIB 这几个环境变量中找文档

  • 将某目录下安装过的 Perl Modules 合并到单独的 blib 中
[root@slin ~]# find .cpan -type d -name 'blib'
.cpan/build/XML-NamespaceSupport-1.09/blib
.cpan/build/XML-SAX-Expat-0.39/blib
.cpan/build/XML-Parser-2.36/blib
.cpan/build/DBD-Pg-2.5.1/blib
.cpan/build/DBI-1.604/blib
.cpan/build/XML-Simple-2.18/blib
.cpan/build/version-0.74/blib
.cpan/build/XML-SAX-0.16/blib
[root@slin ~]# find .cpan -type d -name 'blib' |xargs -i cp -r {} .
[root@slin ~]# ls blib
arch  bin  lib  man1  man3  script
[root@slin ~]# tar jcf blib.tar.bz2 blib/

这样只需要将这个 [blib.tar.bz2] 解压缩到合适的地方,即可使用这些库了。

我们转到另外一台机器,测试这个包的使用情况。

首先确认这台机器没有安装 XML::Simple 库:

[luoyi@imtest5 perltest]$ perl -MXML::Simple
Can't locate XML/Simple.pm in @INC (@INC contains: /home/y/lib/perl5/5.8/i686-linux-64int 
/home/y/lib/perl5/5.8 /home/y/lib/perl5/site_perl/5.8/i686-linux-64int
/home/y/lib/perl5/site_perl/5.8 /home/y/lib/perl5/site_perl/5.8 /home/y/lib/perl5/site_perl/5.8.6/i686-linux-64int 
/home/y/lib/perl5/site_perl/5.8.6 /home/y/lib/perl5/site_perl
/home/y/lib/perl5/5.8.6 /home/y/lib/perl5/5.8.6/i686-linux-64int /home/y/lib/perl5/site_perl/5.8.6/i686-linux-64int 
/home/y/lib/perl5/site_perl/5.8.6 /home/y/lib/perl5/site_perl/5.8.6/i686-linux-64int .).
BEGIN failed--compilation aborted.

然后将这个 bz2 包,解压缩到本地,并且使用这个包内的 library:

[luoyi@imtest5 perltest]$ ls
blib  foo.xml  Perlblib.tar.bz2  test.pl
[luoyi@imtest5 perltest]$ cat foo.xml
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
</config>
[luoyi@imtest5 perltest]$ cat test.pl
#!/usr/bin/perl -Iblib/lib -Iblib/arch -w

use XML::Simple;
use Data::Dumper;

use strict;
use bytes;

my $a = XMLin("foo.xml");
print Dumper($a);
[luoyi@imtest5 perltest]$ ./test.pl
$VAR1 = {
          'debugfile' => '/tmp/foo.debug',
          'logdir' => '/var/log/foo/'
        };
[luoyi@imtest5 perltest]$

这样的过程感觉比 cpan 装包简单,可靠。

Personal tools