在shell脚本中调用perl子例程

har*_*ris 2 shell perl perl-module

我制作了一个Perl模块,MyModule.pm其中包含一些getText我想在shell脚本中调用的子例程。我尝试了以下方式,但它给出了错误;

SEC_DIR=`perl -MMyModule -e 'getText'`; # line 1
echo $SEC_DIR
exit 0
Run Code Online (Sandbox Code Playgroud)

返回错误;

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 .).
Run Code Online (Sandbox Code Playgroud)

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'`;
Run Code Online (Sandbox Code Playgroud)

Tom*_*szK 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
Run Code Online (Sandbox Code Playgroud)

加载模块的另一种方法是:

$ perl -e 'require "./SomeModule.pm"; print SomeModule::testsub()'
it works
Run Code Online (Sandbox Code Playgroud)