在shell脚本中调用perl子例程

在shell脚本中调用perl子例程,perl,shell,perl-module,Perl,Shell,Perl Module,我制作了一个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 /

我制作了一个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位于同一位置。 我尝试了一些其他的选择

第1行:
如果不知道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

感谢您的回复,但是当我在“i”之后使用带有“.”的代码时,它会显示相同的错误,但是当我删除“.”时,它不会回显任何内容。getText子例程正在返回一个文件路径。我已经用Perl5.10.1在普通的Ubuntu10.10上对它进行了测试。使用“-I.”只需在任何其他目录之前搜索当前目录中的模块。TIMTOWTDI:
perl-e'do./MyModule.pm”;getText'
$ perl -e 'require "./SomeModule.pm"; print SomeModule::testsub()'
it works