如何使用require从Exporter Perl模块导入符号?

时间:2013-01-15 16:39:11

标签: perl import module perl-module exporter

我喜欢import使用Exporter而非require的{​​{1}}动力Perl模块中的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 个答案:

答案 0 :(得分:7)

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{},否则无法使用。