我想检查两个引用是否指向同一个对象。看来我可以简单的使用
if ($ref1 == $ref2) { # cheap numeric compare of references print "refs 1 and 2 refer to the same thing\n"; }
解决方法
默认情况下,参考号码将其编号到其地址。这些引用地址对于每个引用是唯一的,因此它通常可以用于相等检查。
但是,在您显示的代码段中,您首先必须确保$ ref1和$ ref2都是实际引用的。否则,由于包含引用地址的常规标量,您可能会收到不正确的结果。
此外,没有什么可以保证对其地址进行numify的引用。例如,对象可以使用重载来影响他们在不同上下文中返回的值。
比直接比较数字相等的引用更为坚实的方法是使用由Scalar::Util
提供的refaddr函数,确保双方实际上都是引用。