Как импортировать символы из модуля Perl Exporter с помощью require?

Мне нравится import символы из Exporter модуль Perl с питанием require и не use, Perl не знает переменную, которую он только что импортировал.

Пример Perl-модуля:

package TheModule;
use strictures;
use base 'Exporter';
use Const::Fast qw( const );
const our $TEST_VAR_1 => 'Test variable 1';
our @EXPORT_OK = qw( $TEST_VAR_1 );
our %EXPORT_TAGS = ( TEST_VAR => [qw( $TEST_VAR_1 )] );

Пример сценария Perl

#!/usr/bin/perl
use strictures;
require TheModule;
TheModule->import( ':TEST_VAR' );
printf "Test variable 1 contains: %s\n", $TEST_VAR_1;

Следующий пример работает, но я должен использовать require вместо use,

#!/usr/bin/perl
use strictures;
use TheModule ( ':TEST_VAR' );
printf "Test variable 1 contains: %s\n", $TEST_VAR_1;

Как импортировать $TEST_VAR_1 в пределах require среда?

1 ответ

Решение

our @EXPORT_TAGS должно быть our %EXPORT_TAGS,:)


Хорошо, есть что-то еще не так. Во время компиляции, когда

printf "Test variable 1 contains: %s\n", $TEST_VAR_1;

превращается в ops, $TEST_VAR_1 еще не существует в этой области, так как

TheModule->import( ':TEST_VAR' );

выполняется только во время выполнения. Так что, если вы не положите BEGIN{} вокруг вашего спроса и импорта, это не может работать.

Другие вопросы по тегам