我想在 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 http://search.cpan.org/perldoc?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" } };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)