代码之家  ›  专栏  ›  技术社区  ›  friedo

reftype的处理方式是什么?

  •  5
  • friedo  · 技术社区  · 14 年前

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

    use Scalar::Util 'reftype';
    
    if ( reftype $some_ref eq reftype { } ) { ... }
    

    打电话的目的是什么 reftype 在匿名hashref上?为什么不直接说 eq 'HASH' ?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Community CDub    7 年前

    你现在可以把它和“hash”比较一下,因为这就是现在的情况。

    但可能并不总是如此。

    一个很好的例子是他们对编译的regex所做的更改。在旧的Perls中,refType是一个标量。然而,从5.12开始(我相信),它现在是自己的类型,regexp。例子:

    perl -MScalar::Util=reftype -e "print reftype qr//" 5.8给出 SCALAR 但5.12节的内容相同 REGEXP .

    您可以从中看到此应用程序的另一个应用程序 this question 我问了一段时间以前,除了那里 ref 而不是 reftype . 但原理是一样的。

    简单地说,通过比较 reftype {} 他们保证它现在和将来都不会(我认为这是一个杀手级的特性)在你的程序中硬编码另一个字符串。