#!/usr/bin/perl
my $var_a;
$sub_a = "a";
$var_a = "a";
print ${var_."$sub_a"},"\n";
$sub_b = "b";
$var_b = "b";
print ${var_."$sub_b"},"\n";
__DATA__
b
为什么打印b而不打印a?对我来说,这似乎是非常出乎意料的行为。
我正在尝试使用具有替代名称的变量。实际上,我不能不声明变量,因为赋值是在forloop中完成的,因此具有不同的词法作用域。
最佳答案
请注意,这与使用变量包含其他变量的名称无关。
之所以不起作用,是因为实际上${"var_a"}
构造指向包级变量$main::var_a
。
由于$var_a
被声明为词法变量,因此它是一个不同的标识符,因此${"var_a"}
是undef的。
您可以看到,如果将my $var_a
更改为our $var_a
our $var_a="a";
my $var_b="b";
$var_c="c";
print ${"var_a"},"\n";
print ${"var_b"},"\n";
print ${"var_c"},"\n";
######## RESULTS:
a
c
正如其他人指出的那样,虽然有很好的解释说明为什么您尝试做的事情行不通,但是您正在做的事情很可能是错误的方法。除非没有更好的方法,否则几乎不要使用此方法。没有您的问题,尚不清楚更好的方法是什么,但很可能像TLP的答案所说的那样是一个哈希。