【问题标题】:How to import symbols from a Exporter Perl module using require?如何使用 require 从 Exporter Perl 模块导入符号?
【发布时间】:2023-03-14 20:54:01
【问题描述】:

我喜欢使用require 而不是useExporter 驱动的Perl 模块中的import 符号。 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;

如何在require环境中导入$TEST_VAR_1

【问题讨论】:

    标签: perl import module perl-module exporter


    【解决方案1】:

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


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

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

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

    TheModule->import( ':TEST_VAR' );
    

    仅在运行时执行。因此,除非您在 require 和 import 周围加上 BEGIN{},否则这是行不通的。

    【讨论】:

    • 不幸的是,这只是我现在修正的一个错字。问题依然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多