在shell脚本中调用perl子例程

发布于 2024-10-06 10:08:04 字数 836 浏览 4 评论 0原文

我制作了一个 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 行:

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

i made a Perl Module MyModule.pm it has some subroutines getText which I wanted to call in a shell script.
i tried following manner but it gives error;

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

Returned Error;

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 failed--compilation aborted.

PS: .pm file and .sh are at same location.
some other options I tried;

line 1:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寄居者 2024-10-13 10:08:04

如果不知道 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

It's hard to say what went wrong not knowing what's in MyModule.pm.

@INC looks ok (. is in the list, so there should be no problem with locating MyModule.pm in current directory).

Here's a minimal example that works the way you described. Hope it helps.

$ cat SomeModule.pm 
package SomeModule;

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

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

Another way to load the module would be:

$ perl -e 'require "./SomeModule.pm"; print SomeModule::testsub()'
it works
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文