我最近看到一些代码提醒我提出这个问题.最近,我看到了很多这样的事情:
use Scalar::Util 'reftype';
if ( reftype $some_ref eq reftype { } ) { ... }
Run Code Online (Sandbox Code Playgroud)
调用reftype匿名hashref 的目的是什么?为什么不说呢eq 'HASH'?
你现在可以将它与'HASH'进行比较,因为这就是现在的回归.
但它可能并不总是如此.
一个很好的例子是他们对编译的正则表达式所做的改变.在较旧的Perls中,reftype是SCALAR.但是,从5.12开始(我相信)它现在是它自己的类型REGEXP.例:
perl -MScalar::Util=reftype -e "print reftype qr//"在5.8给出SCALAR,但在5.12给出相同REGEXP.
你可以从我问过的这个问题中看到另一个应用程序,除了它用来ref代替reftype.原则是一样的.
简单地说,通过比较reftype {},他们guarenteeing,这正是现在和将来没有(我认为这是杀手级功能)硬编码又串到你的程序.