0

私は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

私のOSは:

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

これらは、マシンに設定されているさまざまなperlenv変数です。

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

モジュールは現在の作業ディレクトリに存在すると見なされます。

これを機能させる方法について何かアイデアはありますか?

ありがとう

4

2 に答える 2

5

モジュールが正しくインストールされていません。複数の .pm ファイルで構成されています。見つからないのは .pm ではなく、それに付随する .dll/.so です。

于 2013-03-16T17:13:40.233 に答える
0

見て:

@INC contains: ./Text 

そのディレクトリにないものは何だと思いますか? 「Text」という名前の別のディレクトリ。したがって、perl はそこに Text::CSV_XS を見つけません (普通の CVS_XS だけを見つけます)。

または-I .:

BEGIN { unshift @INC, '.' }
于 2013-03-16T15:51:54.810 に答える