Вызов подпрограммы perl в сценарии оболочки - PullRequest
2 голосов
/ 07 декабря 2010

Я сделал Perl-модуль MyModule.pm, в нем есть некоторые подпрограммы getText, которые я хотел вызвать в сценарии оболочки.я попробовал следующий способ, но он выдает ошибку;

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 не удалось - компиляция прервана.Sh находятся в том же месте.некоторые другие варианты, которые я пробовал;

строка 1:

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

1 Ответ

5 голосов
/ 07 декабря 2010

Трудно сказать, что пошло не так, не зная, что в 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
...