2017-05-05 186 views
-2

我必須檢查兩個散列值相等...如何檢查兩個哈希值是否相等?

散列1:19261 | 9;0;9;0;1 哈希2:19261 | 9;0;9;0;1

如果在散列1或2的值不等於象:

散列1:19261 | 9;0;9;0;1 哈希2:19261 | 9;0;9;0;5

它應該出現錯誤!

我就是這麼做的:

if($ADL_HNO{"$LinkID;$NameIndex;$Side"} == $ADLT_HNO{"$key[0];$key[1];$key[2]"}){ 
    #print " HNO identisch\n"; 
} 
else 
{ 
    print "Die ADL-HNO: ".$ADL_HNO{"$LinkID;$NameIndex;$Side"}."\ mit der LinkID: $LinkID und Side: $Side sind nicht identisch zur ADLT-HNO: ".$ADLT_HNO{"$key[0];$key[1];$key[2]"}."\n"; 
} 

目前,它僅比較的第一個數字(在這種情況下,9)。 我如何檢查所有?

+4

使用'eq'來比較字符串。你用'嚴格使用嗎?使用警告;'? – melpomene

+0

啊現在可以工作....我使用了錯誤的操作符...謝謝! – Moehre

回答

1

通過使用數字比較運算符(==),您告訴Perl將您的值作爲數字進行比較。 Perl很高興能做到這一點。

$ perl -E'say "19261 | 9;0;9;0;1" == "19261 | 9;0;9;0;5"' 
1 

如果你有use warnings開啓(並且你應該總是這樣做),那麼Perl會告訴你:

$ perl -Mwarnings -E'say "19261 | 9;0;9;0;1" == "19261 | 9;0;9;0;5"' 
Argument "19261 | 9;0;9;0;5" isn't numeric in numeric eq (==) at -e line 1. 
Argument "19261 | 9;0;9;0;1" isn't numeric in numeric eq (==) at -e line 1. 
1 

當Perl是要求比較字符串的數字,它看起來的東西,看起來像字符串開頭的一個數字,並使用它(在這種情況下,值爲19261)。如果找不到號碼,則使用零。

您可以看到Perl如何將您的字符串解釋爲一個數字,方法是在其中添加零。

$ perl -E'say "19261 | 9;0;9;0;1" + 0' 
19261 

總之,如果你想比較字符串,使用的字符串比較操作符(在這種情況下,eq)。

而且總是use warnings