關於一些單元測試,我發現 能夠從預先聲明的哈希中將一組全局變量導入到當前包中。進口後,他們不應該像$main::var1
這樣的包名稱,而是簡單地作爲$var1
。如何將散列中的變量作爲全局變量導入?
我發現,他們只好再與our
被預先聲明,但這是不可能的,例如使用eval '$::var1=3; our $var1'
只能申報的eval
範圍$var1
編程做..
最終我發現我可以使用在vars
編譯:
use feature qw(say);
use strict;
use warnings;
BEGIN {
my %test_vars = (var1 => 3, var2 => 1);
my @names;
for my $key (keys %test_vars) {
my $temp = $test_vars{$key};
no strict 'refs';
*{"main\::$key"} = \$temp;
push @names, "\$$key";
}
use vars @names;
}
#our $var1;
say $var1;
,但是這給了錯誤:
Variable "$var1" is not imported at ./p.pl line 22.
Global symbol "$var1" requires explicit package name at ./p.pl line 22.
Execution of ./p.pl aborted due to compilation errors.
如果我不是更換use vars @names;
與硬編碼名稱use vars qw($var1 $var2);
它工作正常..
那麼您可以更近一點:'$ main :: var1'也可以稱爲'$ :: var1'。 – Axeman