#!/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的答案所说的那样是一个哈希。

10-01 07:53
查看更多