有谁可以告诉我为什么打印REF(*)
而不是0
?
$a = 0;
$a = \$a;
print $$a . "\n";
答案 0 :(得分:7)
嗯,因为$a
不再包含0,而是对自身的引用。你在第二行覆盖了它!
如果您想将$a
设置为对$a
原始值的引用,那么您可以写
$a = \"$a"
通过使用恰好评估$a
的值的表达式并对其进行引用来工作。如果$a
以非简单字符串或数字之类的内容开始,例如引用或在字符串化时更改的任何值,则会失败。然后你可以编写一个身份函数,如
sub i { shift }
并使用
$a = \i($a)
答案 1 :(得分:3)
你的上一个作业使$a
引用自身,因此解除引用它是有道理的,因为循环方式追逐自己的尾巴,
use warnings;
use Data::Dumper;
$a = 0;
$a = \$a;
print Dumper $a;
输出
$VAR1 = \$VAR1;
您可能希望引用一个符合您想要的值的列表
($a) = \map { $_ } $a;
print Dumper $a;
输出
$VAR1 = \0;