我以为你曾经能够在"严格"模式下做到这一点,但我可能记得不正确.有可能这样的东西工作......
use strict;
use warnings;
package SomePackage;
my $TargetPID="demo:5"; #using "our" also works, but not in strict mode
my $VarName="TargetPID";
print ${$VarName}; #works but not in strict or if the var is declared with "my"
exit;
Run Code Online (Sandbox Code Playgroud)
我感兴趣的原因是我正在尝试根据文本文件中的文本标志选择变量,我想将文本文件的内容读入哈希,然后沿着行替换一些标识符"#TargetPID#"与相应的变量.也能够指定包和变量(或常量)将是一个不错的tbonus.
我不能想到以你尝试过使用哈希的方式做任何优势:
use strict;
use warnings;
package SomePackage;
my %vars = ();
$vars{'TargetPID'}="demo:5";
my $VarName="TargetPID";
print $vars{$VarName};
exit;
Run Code Online (Sandbox Code Playgroud)
如果您真的必须使用$TargetPID
作为变量而不是散列的成员,您可以使用eval
:
my $TargetPID = "demo:5";
my $VarName = '$TargetPID';
print eval $VarName;
Run Code Online (Sandbox Code Playgroud)
或者,如果由于某种原因,你需要的价值$VarName
是'TargetPID'
和不是'$TargetPID'
,你可以做print eval '$' . $VarName
.