使用perl模块的当前工作目录版本

时间:2013-03-16 15:33:14

标签: perl module

我正在尝试运行perl脚本并使其在当前工作目录中使用模块文件。我这样做是因为我最终需要在另一台机器上使用脚本和模块,而我无法控制安装了什么或哪些模块。 我的问题是我可以让它在某些机器上工作,而不是其他机器。

脚本是:

ubuntu@machine-5:/tmp/pig-local$ cat test.pl
#!/usr/bin/perl -w -I ./Text
use Text::CSV_XS ;
print "Hello World\n"

并且在执行时我收到错误:

ubuntu@machine-5:/tmp/pig-local$ ./test.pl 
Can't locate loadable object for module Text::CSV_XS in @INC (@INC contains: ./Text  ./Text /home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi /home/ubuntu/perl5/lib/perl5/x86_64-linux-g
nu-thread-multi /home/ubuntu/perl5/lib/perl5 /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/
lib/site_perl .) at ./test.pl line 2
Compilation failed in require at ./test.pl line 2.
BEGIN failed--compilation aborted at ./test.pl line 2.

当前工作目录中包含Text目录和CSV_XS.pm模块。我检查了文件上的md5sum,它与脚本工作的机器相同。

ubuntu@machine-5:/tmp/pig-local$ ls Text/
CSV_XS.pm

我的操作系统是:

ubuntu@machine-5:/tmp/pig-local$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.1 LTS
Release:        12.04
Codename:       precise

这些是机器上设置的不同perl env变量:

ubuntu@machine-5:/tmp/pig-local$ env | grep -i perl
PERL5LIB=/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi:/home/ubuntu/perl5/lib/perl5
PERL_MB_OPT=--install_base /home/ubuntu/perl5
PATH=/home/ubuntu/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PERL_LOCAL_LIB_ROOT=/home/ubuntu/perl5
PERL_MM_OPT=INSTALL_BASE=/home/ubuntu/perl

当我检查perldoc是否知道相关模块时,

ubuntu@machine-5:/tmp/pig-local$ perldoc -l Text::CSV_XS
./Text/CSV_XS.pm

它认为该模块存在于当前工作目录中。

有关如何使其发挥作用的任何想法?

由于

2 个答案:

答案 0 :(得分:5)

您没有正确安装模块。它包含多个.pm文件。这不是它找不到的.pm,它是.dll / .so随之而来。

答案 1 :(得分:0)

查找

@INC contains: ./Text 

猜猜该目录中的不是是什么?另一个名为“Text”的目录。因此,perl在那里找不到Text :: CSV_XS(它只会找到简单的CVS_XS)。

尝试-I .或:

BEGIN { unshift @INC, '.' }