1
  1. 我想从 solaris servier 中的 perl 脚本连接到 oracle 数据库。在当前的 perl 版本 5.8.4 中可以看到 DBI 已安装但未安装 DBD::Oracle。我没有 root 访问权限,也没有使用我的家庭用户 ID。下载 DBD-Oracle-1.50 并在我的 perl 脚本所在的本地目录中解压缩。我想将 DBD Oracle 库文件复制到自定义目录并运行脚本,因为我没有 root 访问权限。当我阅读 DBD-Oracle-1.50 中的安装脚本时,它说手动安装我需要运行以下脚本。由于我没有 root 访问权限,因此我想将库模块复制到本地目录中。不知道如何告诉这些脚本将其安装在我的 perl 脚本所在的本地目录中。

  2. 在我的用户 ID 下的自定义目录中安装 DBI 和 DBD 是否使其正常工作。这些模块是否需要 root 访问权限才能正常工作?要使用 DBD::Oracle 需要在服务器中安装 oracle。我的理解 Oracle 驱动程序 DBD::Oracle 应该照顾它。

 perl Makefile.PL
 make && make test
 make install 

>  ls -tlr /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int total 956
> -rwxr-xr-x   1 root     bin        15161 Mar 26  2005 Roadmap.pod
> -rwxr-xr-x   1 root     bin         1048 Sep  5  2006 TASKS.pod
> -rwxr-xr-x   1 root     bin       289343 Jun 26  2007 DBI.pm
> -rwxr-xr-x   1 root     bin         4608 Jun 12  2008 goferperf.pl
> -rwxr-xr-x   1 root     bin         1356 Jun 12  2008 dbixs_rev.pl
> -rwxr-xr-x   1 root     bin        58386 Apr  3  2010 SNMP.pm drwxr-xr-x   3 root     bin            7 Oct 13  2010 NetSNMP
> drwxr-xr-x   2 root     bin            3 Oct 13  2010 Win32 drwxr-xr-x
> 8 root     bin           19 Oct 13  2010 DBI drwxr-xr-x   2 root    
> bin            4 Oct 13  2010 Bundle drwxr-xr-x   6 root     other    
> 6 Oct 13  2010 auto drwxr-xr-x   3 root     bin           11 Oct 13 
> 2010 DBD
> 
> ls -ltr  /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int/DBD total 543
> -rwxr-xr-x   1 root     bin       111586 May  6  2006 Pg.pm
> -rwxr-xr-x   1 root     bin        28785 Sep 27  2006 Proxy.pm
> -rwxr-xr-x   1 root     bin         7937 Jan 25  2007 Sponge.pm
> -rwxr-xr-x   1 root     bin        42836 Feb  6  2007 DBM.pm
> -rwxr-xr-x   1 root     bin        19882 Mar 28  2007 File.pm
> -rwxr-xr-x   1 root     bin        12051 May 10  2007 ExampleP.pm
> -rwxr-xr-x   1 root     bin        43586 May 14  2007 Gofer.pm
> -rwxr-xr-x   1 root     bin         3761 Jun 15  2007 NullP.pm drwxr-xr-x   4 root     bin            4 Oct 13  2010 Gofer
4

2 回答 2

3

如果已经安装了 DBI,您应该只需要安装 DBD::Oracle,尽管您可能想要安装更高版本的 DBI。您可以在您的主目录下安装 DBD::Oracle,然后将 PERL5LIB 环境变量设置为该目录(或包含该目录)。很长的安装方法是:

perl Makefile.PL PREFIX=~/perl #Or whatever sub-directory you like
make
make test
make install

然后在运行程序之前在 PERL5LIB 中至少包含“~/perl/lib;~/perl/lib/site_perl”(或在程序中包含“使用库”)。

您还可以设置某些环境变量,例如 PERL_MM_OPT 和 PERL_MB_OPT,这样您就不必在命令行上指定 PREFIX=(请参阅 ExtUtils::MakeMaker 和 Module::Build 的文档)。我还建议使用cpanm并将 PERL_CPANM_HOME 设置为您的主目录下的内容。

于 2012-10-04T20:02:40.920 回答
1

Perl 模块可以很好地安装在自定义目录中。当您无权root安装PM. 一旦您安装DBIDBD在您的自定义文件夹中,有几种不同的方法可以确保perl知道此安装。

1.设置环境变量PERL5LIB

Perl 将在 PERL5LIB 环境变量中指定的目录中查找模块,然后再查找标准库和当前目录,因此您可以设置此变量来定位您的模块。

语法与您用于 PATH 环境变量的语法相同,因此您在 unix 上用冒号分隔目录,在 Windows 上用分号分隔目录。

例子:

# unix, bourne shell
PERL5LIB=/home/path/lib:/usr/another/path/lib; export PERL5LIB

请注意,使用-T选项(污点检查)运行的脚本不使用该变量,因此在这些情况下,此选项将不起作用。

2.使用'-I'命令行参数

语法应该类似于:

perl -I /home/path/lib -I /usr/another/lib script.pl

3.在脚本中添加库路径

在脚本中包含路径的命令是:use lib "path"。请注意,此语句将“path”添加到 @INC 数组中,因此它与 unshift @INC, "path" 基本相同

Example:

#!/usr/bin/perl
use lib "/home/path/lib";
use lib "/usr/another/lib";
于 2012-10-05T19:16:17.033 回答