#!/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"}
现实中的construct指的是包级别的变量$main::var_a
.
Since $var_a
被声明为词法变量,它是一个不同的标识符,因此${"var_a"}
是未定义的。
你可以看到,如果你改变my $var_a
to 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 的答案所说的散列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)