变量名中的perl变量替换

前端之家收集整理的这篇文章主要介绍了变量名中的perl变量替换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#!/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,但不是?这对我来说似乎是非常意外的行为.

我正在尝试使用带有替换名称的变量.在实践中,我不能只是不声明变量,因为赋值是在forloop中完成的,因此具有不同的词法范围.

解决方法

请注意,这与您使用变量包含其他变量名称的事实无关.

这不起作用的原因是因为${“var_a”}构造实际上是指包级变量$main :: var_a.

由于$var_a被声明为词法变量,因此它是一个不同的标识符,因此${“var_a”}是undef.

如果将$var_a更改为$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的回答所说的哈希.

猜你在找的Perl相关文章