EDIT
Извините за путаницу, вот мой обновленный вопрос.
Я использую FindBin в моем скрипте Perl, как это:
use FindBin qw($Bin);
use lib "$Bin/../lib";
use multi_lib qw(say_hello_world);
Это работает:
multi_lib::say_hello_world();
но это не так:
say_hello_world();
РЕДАКТИРОВАТЬ 2
Вот так выглядит multi_lib.pm:
package multi_lib;
use strict;
use warnings;
use 5.010;
require Exporter;
my @ISA = qw(Exporter); # removing `my` causes an error!
my @EXPORT_OK = qw(say_hello_world); # removing `my` causes an error!
sub say_hello_world {
say "hello world!";
}
p.s.
Я понятия не имею, что означает @ISA
, и если добавление my
в порядке ... Я следовал preldoc для Exporter
.
Редактировать 3
Я думаю, что решил это, переместив @EXPORT_OK
до use strict
. Я привык ставить use strict
прямо в начале моих сценариев, но я думаю, что это не тот путь, чтобы пойти сюда (?). Во всяком случае, это работает:
use Exporter 'import';
@EXPORT_OK = qw(say_hello_world);
use strict;
...
Я все равно буду благодарен за некоторые пояснения относительно того, что именно здесь происходит и каков рекомендуемый способ экспорта подпрограмм (как я сделал?).