这可行吗?我需要将字符串更改为变量。
示例:
如果我有这样的变量:
$this_is_test = "what ever";
$default = "this";
$default = $default . "_is_test";
我希望$default
获取$this_is_test
的值。
答案 0 :(得分:13)
沿着my other answer,每当您发现自己将字符串后缀添加到变量名称时,请使用哈希:
my %this = (
is_test => "whatever",
is_real => "whereever",
);
my $default = $this{is_test};
print "$default\n";
不为此目的使用符号引用,因为它们是不必要的,并且在您的问题的上下文中可能非常有害。有关详细信息,请参阅Why it's stupid to 'use a variable as a variable name'?,part 2,part 3和mjd。
答案 1 :(得分:4)
正如rafl所说,这可以通过符号引用来实现,但它们非常危险(它们是代码注入向量)并且不适用于词法变量(并且应该使用词法变量而不是包变量)。每当你想要一个符号引用时,你几乎肯定想要一个哈希。而不是说:
#$this_is_test is really $main::this_is_test and is accessible from anywhere
#including other packages if they use the $main::this_is_test form
our $this_is_test = "what ever";
my $default = "this";
$default = ${ $default . "_is_test" };
你可以说:
my %user_vars = ( this_is_test => "what ever" );
my $default = "this";
$default = $user_vars{ $default . "_is_test" };
这将%user_vars
的范围限制在创建它的块中,并且密钥与实际变量的隔离限制了注入攻击的危险。