不能在Perl中取消引用标量

iPh*_*ian 2 perl scalar reference

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

$a = 0;
$a = \$a;
print $$a . "\n";
Run Code Online (Sandbox Code Playgroud)

Bor*_*din 7

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

如果你想设置$a到一个参考$a原始值,那么你可以写

$a = \"$a"
Run Code Online (Sandbox Code Playgroud)

它通过使用恰好评估值的表达式并对其进行$a引用来工作.如果$a以简单的字符串或数字之外的其他内容开始,这将失败,例如引用或在字符串化时更改的任何值.然后你可以写一个身份函数,如

sub i { shift }
Run Code Online (Sandbox Code Playgroud)

并使用

$a = \i($a)
Run Code Online (Sandbox Code Playgroud)