我制作了一个Perl模块MyModule.pm
它有一些子程序getText
,我想在shell脚本中调用它。
我尝试了以下方式,但它给出了错误;
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位于同一位置。 我试过的其他一些选择;
SEC_DIR=`perl -MMyModule -e '&getText'`;
SEC_DIR=`perl -MMyModule -e 'use MyModule; getText'`;
SEC_DIR=`perl -e 'use MyModule; getText'`;
答案 0 :(得分:5)
如果不知道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