Почему я получаю сообщение об ошибке «Неопределенная подпрограмма» при вызове функции из модуля? - PullRequest
8 голосов
/ 10 марта 2012

У меня есть модуль с именем Helpers.pm:

use warnings;
use 5.012;

package Helpers;
use Exporter qw(import);
our @EXPORT_OK = qw(my_function);

sub my_function {
    return { one => 1, two => 2 };
}

1;

, вызов его в скрипте:

#!/usr/bin/env perl
use warnings;
use 5.012;
use Data::Dumper;
use FindBin qw($RealBin);

use lib $RealBin;
use Helpers qw(my_function);

my $ref = my_function();
say Dumper $ref;

, и я не получаю сообщений об ошибках.Но когда я помещаю модуль в каталог TestDir, модифицирую скрипт следующим образом:

#!/usr/bin/env perl
use warnings;
use 5.012;
use Data::Dumper;
use FindBin qw($RealBin);

use lib $RealBin;
use TestDir::Helpers qw(my_function);

my $ref = my_function();
say Dumper $ref;

Я получаю это сообщение об ошибке:

Undefined subroutine &main::my_function called at ./perl.pl line 10.

Почему я получаю эту ошибку-message

Ответы [ 2 ]

14 голосов
/ 10 марта 2012

Возможно, вы забыли изменить объявление пакета с

package Helpers;

на:

package TestDir::Helpers;
3 голосов
/ 10 марта 2012

Я думаю, это потому, что он не может найти ваш модуль в пути lib, http://perldoc.perl.org/lib.html.

use lib 'TestDir';
use Helpers qw(my_function);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...