无法在Perl中取消引用标量

时间:2015-08-02 19:55:04

标签: perl reference scalar

有谁可以告诉我为什么打印REF(*)而不是0

$a = 0;
$a = \$a;
print $$a . "\n";

2 个答案:

答案 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;