gpt4 book ai didi

perl - 如何有条件地使用 Perl 中的模块?

转载 作者:行者123 更新时间:2023-12-03 14:35:53 26 4
gpt4 key购买 nike

我想在 Perl 中做这样的事情:

$Module1="ReportHashFile1"; # ReportHashFile1.pm
$Module2="ReportHashFile2"; # ReportHashFile2.pm

if(Condition1)
{
use $Module1;
}
elsif(Condition2)
{
use $Module2;
}

ReportHashFile*.pm 包含一个包 ReportHashFile* 。

另外如何根据动态模块名称引用模块内的数组?
@Array= @$Module1::Array_inside_module;

无论如何我可以做到这一点。某种编译器指令?

最佳答案

您可能会找到 if 对此有用的模块。

否则,基本思想是使用 require ,它发生在运行时,而不是 use ,这发生在编译时。注意 '

BEGIN {
my $module = $condition ? $Module1 : $Module2;
my $file = $module;
$file =~ s[::][/]g;
$file .= '.pm';
require $file;
$module->import;
}

至于寻址全局变量,如果您只是导出变量或将其返回给调用者的函数可能会更容易,您可以使用它的非限定名称。否则也有可能使用方法并将其称为 $Module->method_name .

或者,您可以使用 perlref 中记录的符号引用。 .但是,这通常是一种代码味道。
my @array = do {
no strict 'refs';
@{ ${ "${Module}::Array_inside_module" } };
};

关于perl - 如何有条件地使用 Perl 中的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com