我以为您以前可以在“严格”模式下执行此操作,但是我可能记错了。这样的事情可能会起作用...
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;
我感兴趣的原因是,我试图基于文本文件中的文本标志选择一个变量,并且希望将文本文件的内容读入哈希,然后沿行替换一些标识符带有相应变量的“#TargetPID#”。同时能够指定包和变量(或常量)将是一个不错的选择。
最佳答案
我想不出以尝试使用散列方式进行操作的任何优势:
use strict;
use warnings;
package SomePackage;
my %vars = ();
$vars{'TargetPID'}="demo:5";
my $VarName="TargetPID";
print $vars{$VarName};
exit;
如果确实必须使用
$TargetPID
作为变量而不是哈希的成员,则可以使用eval
:my $TargetPID = "demo:5";
my $VarName = '$TargetPID';
print eval $VarName;
或者,如果由于某种原因您需要
$VarName
的值为'TargetPID'
而不是'$TargetPID'
,则可以执行print eval '$' . $VarName
。