我正在接受來自另一個函數的散列的散列,並且散列的散列的一些元素可以是另一個散列。我如何測試以查看是否有散列?我如何測試「something」是Perl中的散列?
回答
取決於你想要什麼,你將需要使用ref
或reftype
(這是Scalar::Util
,核心模塊)。如果引用是對象,則ref
將返回對象的類而不是基礎引用類型,reftype
將始終返回基礎引用類型。
if (ref $var eq ref {}) {
print "$var is a hash\n";
}
use Scalar::Util qw/reftype/;
if (reftype $var eq reftype {}) {
print "$var is a hash\n";
}
@brian d foy你不熟悉「tf」這個詞嗎?這就像「如果」,但更多。 – 2010-09-24 17:36:58
那麼,if的更強版本呢?還有更弱的版本嗎? – 2010-09-24 17:47:20
@brain d foy是的,有「ɨf」。 – 2010-09-24 18:59:56
使用ref
功能:
ref($hash_ref) eq 'HASH' ## $hash_ref is reference to hash
ref($array_ref) eq 'ARRAY' ## $array_ref is reference to array
ref($hash{$key}) eq 'HASH' ## there is reference to hash in $hash{$key}
這個測試對於類似哈希的對象不起作用:'$ r = {}; bless $ r,「fail」; print ref $ r' – mob 2010-09-24 17:01:39
我不認爲違反對象封裝是一個好主意。 – 2010-09-24 17:03:21
這裏也有一些誤報。 '$ array = [];祝福陣列,'HASH';打印ref $ array;'打印'HASH'。不是你應該這樣做。 – 2015-12-23 18:18:01
use Params::Util qw<_HASH _HASH0 _HASHLIKE>;
# for an unblessed hash with data
print "$ref is a hash\n" if _HASH($ref);
# for an unblessed hash empty or not
print "$ref is a hash\n" if _HASH0($ref);
# for a blessed hash OR some object that responds as a hash*
print "$ref is hashlike\n" if _HASHLIKE($ref);
*通過overload
你可能並不需要最後一個,雖然。
我一直使用isa
,但如果被測試的東西不是一個對象(或可能不是一個對象),你需要把它作爲調用該函數UNIVERSAL::isa
:
if (UNIVERSAL::isa($var, 'HASH')) { ... }
- 1. 如何通過散列的Perl散列中的值訪問鍵?
- 2. 如何在perl中打印匿名散列的散列?
- 3. 如何將散列內部的散列合併到perl中?
- 4. Perl中使用散列值是陣列
- 5. 如何更新散列數組中的值,該散列值位於perl中散列的散列中?
- 6. 如何測試散列是一個有效的集合?
- 7. Perl - 散列散列(散列和標量)?
- 8. 如何在Perl中整合散列?
- 9. perl如何使用exists檢查散列是否在散列數組中
- 10. 修改在Perl的散列內散列
- 11. 在Perl中,我如何處理整個散列?
- 12. 陣列的perl散列
- 13. 如何檢查散列引用在perl中是否爲空
- 14. 如何測試Perl程序從我的測試套件中編譯?
- 15. 在perl中循環散列
- 16. 如何將perl散列轉換爲javascript散列
- 17. 在Perl中,如何測試字符串是否是迴文?
- 18. perl如何引用散列本身
- 19. 如何使用Perl全局散列
- 20. Perl:如何打印散列數組,
- 21. 散列哈希perl
- 22. Perl CSV來散列
- 23. 散列在散列Perl代碼問題
- 24. 如何在數組散列的Perl散列中查找最小值?
- 25. 如何在[perl]中將散列[hashes] *的散列值作爲CSV打印
- 26. 如何獲取perl中嵌套散列內部散列的大小?
- 27. 如果散列值在數組中,如何訪問散列值? PERL
- 28. 我在Perl中聲明一個散列裏面的散列有什麼問題?
- 29. 的Perl:多維散列
- 30. 的Perl - 數組和散列
[我如何知道Perl變量中的值是什麼類型?](http://stackoverflow.com/questions/1731333/how-do-i-tell-what-type-of-value -is-in-a-perl-variable) – Ether 2010-09-24 17:09:28