我最近看到一些代码提醒我提出这个问题。最近,我看到了很多这样的事情:
use Scalar::Util 'reftype';
if ( reftype $some_ref eq reftype { } ) { ... }
在匿名hashref上调用reftype
的目的是什么?为什么不说eq 'HASH'
?
答案 0 :(得分:5)
你现在可以将它与'HASH'进行比较,因为这就是现在的回复。
但可能并非总是如此。
一个很好的例子是他们对已编译的正则表达式所做的更改。在较旧的Perls中,reftype是SCALAR。但是,从5.12开始(我相信)它现在是它自己的类型REGEXP。例如:
5.8上的 perl -MScalar::Util=reftype -e "print reftype qr//"
给出SCALAR
,但5.12上的相同内容为REGEXP
。
你可以在this question看到我之前回答过的另一个应用,除了它使用ref
而不是reftype
。原则是一样的。
简单地说,通过将它与reftype {}
进行比较,他们保证现在和将来都没有(而且我认为这是杀手级功能)将另一个字符串硬编码到您的程序中。