加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

变量名中的perl变量替换

发布时间:2020-12-15 23:23:55 所属栏目:大数据 来源:网络整理
导读:#!/usr/bin/perlmy $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,但不是?这对我来说似乎是非常意外的行为. 我正在尝试使用带有替换名称的变量.在实践中,
#!/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的回答所说的哈希.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读