ref EXPR
ref

檢查 EXPR 的值,預期它是一個參考,並傳回一個字串,提供有關參考和參照類型資訊。如果未指定 EXPR,將使用 $_

如果運算元不是參考,則會傳回空字串。空字串只會在這種情況下傳回。ref 通常用於測試值是否為參考,這可透過將結果與空字串進行比較來完成。直接將 ref 的結果用作真值是一個常見的錯誤:這會出錯,因為對於參考,可能會傳回 0(為假)。

如果運算元是受祝福物件的參考,則會傳回參照被祝福的類別名稱。ref 不在乎參照的實際類型;祝福優先於此類問題。請注意,ref 結果與類別名稱的精確比較並未執行類別成員測試:類別的成員還包括被祝福成子類別的物件,ref 將為其傳回子類別的名稱。另外請注意,類別名稱可能會與內建類型名稱衝突(如下所述)。

如果運算元是未受祝福物件的參考,則傳回值會指出物件的類型。如果未受祝福的參照不是純量,則傳回值將是字串 ARRAYHASHCODEFORMATIO 之一,僅指出它是哪種類型的物件。如果未受祝福的參照是純量,則傳回值將是字串 SCALARVSTRINGREFGLOBLVALUEREGEXP 之一,具體取決於純量當前的值類型。但請注意,qr// 純量已受祝福建立,因此 ref qr/.../ 可能會傳回 Regexp。請注意,這些內建類型名稱也可以用作類別名稱,因此 ref 傳回其中一個名稱並不能明確表示參照屬於該名稱所指的類型。

內建類型名稱和類別名稱之間的模糊性大幅限制了 ref 的實用性。如要取得明確的資訊,請使用 Scalar::Util::blessed() 取得關於祝福的資訊,以及使用 Scalar::Util::reftype() 取得關於實體類型的資訊。使用 isa 方法 進行類別成員測試,不過在嘗試呼叫方法之前,必須確定祝福。或者,isa 算子 可以測試類別成員,而不用先檢查祝福。

另請參閱 perlrefperlobj