$a=\$a;
Run Code Online (Sandbox Code Playgroud)
我正在阅读的这本书说在这种情况下$a永远不会是免费的,我的问题是为什么perl解释器在编译时没有修复它?当它发现它指向自身时,不要增加refcount.
为什么perl不这样做?
一些垃圾收集器有循环检测; 出于性能和历史原因,Perl没有.如果您想要一个不影响引用计数的引用,您可以使用Scalar::Util::weaken获取弱引用,这样就无需在需要依赖它的大多数情况下进行循环检测.需要在解释器中内置循环检测,以自动检测是否\$a应该是弱引用或强引用,因此您只需要明确地执行它.