2010-12-07 13 views
1

私はPerlモジュールを作ったMyModule.pmそれはシェルスクリプトで呼びたいいくつかのサブルーチンgetTextを持っています。 私は次の方法で試しましたが、エラーが発生します。シェルスクリプトでperlサブルーチンを呼び出す

SEC_DIR=`perl -MMyModule -e 'getText'`; # line 1 
echo $SEC_DIR 
exit 0 

エラーが返されました。

Can't locate MyModule.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .). 

BEGINが失敗しました - コンパイルが中止されました。

PS:.pmファイルと.shは同じ場所にあります。 いくつかの他のオプションを試しました。

行1:

SEC_DIR=`perl -MMyModule -e '&getText'`; 
SEC_DIR=`perl -MMyModule -e 'use MyModule; getText'`; 
SEC_DIR=`perl -e 'use MyModule; getText'`; 

答えて

3

それはMyModule.pmに何があるか知らない何が悪かったのか言うのは難しいです。

@INCは(.がリストに含まれているので、現在のディレクトリにMyModule.pmを見つけると問題はないはずです)[OK]を探します。

ここで説明した方法で動作する最小限の例があります。それが役に立てば幸い。あなたの応答のための

$ perl -e 'require "./SomeModule.pm"; print SomeModule::testsub()' 
it works 
+0

おかげで、しかし、私はであなたのコードを使用する場合:モジュールをロードする

$ cat SomeModule.pm package SomeModule; sub testsub { return "it works\n"; } 1; $ VAL='perl -I. -MSomeModule -e 'print SomeModule::testsub'' $ echo $VAL it works 

もう一つの方法は次のようになり、「」 'I'の後に同じエラーが表示されますが、 ''を削除するとそれは何もエコーしません。 getTextサブルーチンがファイルパスを返しています。 – haris

+0

私は単純なUbuntu 10.10、perl 5.10.1でテストしました。 「-I」で現在のディレクトリは他のディレクトリの前のモジュールを検索されます。 – TomaszK

+0

TIMTOWTDI: 'perl -e 'do" ./MyModule.pm "; getText'' –

関連する問題