无法在 Perl 中取消引用标量

Can't dereference scalar in Perl

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

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

嗯,因为 $a 不再包含 0,而是对自身的引用。你在第二行覆盖了它!

如果你想将 $a 设置为对 $a 原始值 的引用,那么你可以写

$a = \"$a"

的工作原理是使用 表达式 恰好计算出 $a 的值,并引用它。如果 $a 开始时不是简单的字符串或数字,例如引用或任何在字符串化时发生变化的值,这将失败。然后你可以写一个身份函数,比如

sub i { shift }

并使用

$a = \i($a)

你的最后一个赋值使得 $a 引用自身,因此取消引用它就像以循环方式追逐自己的尾巴一样有意义,

use warnings;
use Data::Dumper;

$a = 0;
$a = $a;

print Dumper $a;

输出

$VAR1 = $VAR1;

您可能想要引用一个值列表,它可以满足您的需求,

($a) = \map { $_ } $a;

print Dumper $a;

输出

$VAR1 = [=13=];