与reftype {}有什么关系?

时间:2010-05-25 21:37:38

标签: perl

我最近看到一些代码提醒我提出这个问题。最近,我看到了很多这样的事情:

use Scalar::Util 'reftype';

if ( reftype $some_ref eq reftype { } ) { ... }

在匿名hashref上调用reftype的目的是什么?为什么不说eq 'HASH'

1 个答案:

答案 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 {}进行比较,他们保证现在和将来都没有(而且我认为这是杀手级功能)将另一个字符串硬编码到您的程序中。