2

我喜欢import使用而Exporter不是. Perl 不知道他刚刚导入的变量。requireuse

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

4

1 回答 1

7

our @EXPORT_TAGS应该是our %EXPORT_TAGS。:)


好吧,还有其他问题。在编译时,当

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

正在被转换为操作,$TEST_VAR_1在该范围内还不存在,因为

TheModule->import( ':TEST_VAR' );

仅在运行时执行。所以,除非你BEGIN{}在你的 require 和 import 周围加上一个,否则这是行不通的。

于 2013-01-15T16:59:43.817 回答