我最近看到一些代码,这让我想起了要问这个问题。最近,我经常看到这种情况:
use Scalar::Util 'reftype';
if ( reftype $some_ref eq reftype { } ) { ... }
调用匿名哈希引用的
reftype
有什么作用?为什么不直接使用eq 'HASH'
?我最近看到一些代码,这让我想起了要问这个问题。最近,我经常看到这种情况:
use Scalar::Util 'reftype';
if ( reftype $some_ref eq reftype { } ) { ... }
reftype
有什么作用?为什么不直接使用eq 'HASH'
?现在可以将其与“HASH”进行比较,因为这是现在返回的内容。
但不一定总是这样。
一个很好的例子是他们对编译后的正则表达式所做的更改。在旧版的Perl中,reftype是一个标量(SCALAR)。然而,从5.12开始(我相信),它现在是自己的类型REGEXP。例如:
在5.8上运行perl -MScalar::Util=reftype -e "print reftype qr//"
会返回SCALAR
,但在5.12上运行相同的命令会返回REGEXP
。
您可以从我之前提出的这个问题中看到另一个应用,只是那里使用的是ref
而不是reftype
。原则是相同的。
简单地说,通过将其与reftype {}
进行比较,他们保证了现在和将来都是完全正确的,而不需要(我认为这是最棒的功能)在程序中硬编码另一个字符串。
$HASH_TYPE = reftype { };
- friedoARAAY
、AARRY
和ARRAY
一眼看起来非常相似。测试可以揭示问题,但测试问题只是治疗疾病的方法。如果你能通过做一些显然正确到不可能出错的事情来避免感染,那么你就完全避免了问题。 - Robert P