2010-12-07 41 views
1

我做了一個Perl模塊MyModule.pm它有一些我想在shell腳本中調用的子程序getText。 我嘗試了下面的方式,但它給出了錯誤;在shell腳本中調用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應該沒有問題)。

下面是一個最小的例子,它以你描述的方式工作。希望能幫助到你。

$ cat SomeModule.pm 
package SomeModule; 

sub testsub 
{ 
    return "it works\n"; 
} 

1; 
$ VAL=`perl -I. -MSomeModule -e 'print SomeModule::testsub'` 
$ echo $VAL 
it works 

另一種方式來加載模塊是:

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

感謝您的答覆,但是當我用用你的代碼「」在'我'後,它顯示相同的錯誤,但是當我刪除'。'它沒有任何迴應。 getText子程序正在返回一個文件路徑。 – haris 2010-12-07 14:27:48

相關問題