2014-01-11 68 views
0

鑑於下面2個hashref實施例下面將產品不同的輸出取決於單位名稱鍵是否包含一個值或一個Hash的Perl:檢查是否hashref關鍵點的值或另一個hashref

實施例1:

$VAR1 = { 
      'Address2' => {}, 
      'OrganizationName' => 'EXISTS', 
      'Fax' => {} 
     }; 

實施例2:

$VAR1 = { 
      'Address2' => {}, 
      'OrganizationName' => {}, 
      'Fax' => {} 
     }; 

對於第一散列:

my $org = $hashref->{'OrganizationName'}; 
print $org; 

返回:單位名稱

對於第二散列:

my $org = $hashref->{'OrganizationName'}; 
print $org; 

返回:HASH(0x1ae17e0)

這是因爲當「非空」鍵cont時,「空」OrganizationName鍵包含散列是一個價值。

那麼如何測試OrganizationName鍵是否包含散列,如果不能繼續?我想這樣做,而不需要循環通過Hash中的密鑰,因爲有很多,而且對於只有一個密鑰似乎是不必要的。

在此先感謝您的幫助。

回答

4

它不包含散列,它包含對散列的引用。你可以很容易地檢查一個值是否與ref有關:

if (ref $hashref->{OrganizationName}) { 
    print "OrganizationName contains a reference\n"; 
} 

if (ref $hashref->{OrganizationName} eq 'HASH') { 
    print "OrganizationName contains a reference to a hash\n"; 
} 
+1

很好的答案。學到了新東西,解釋非常清楚。非常感謝你! – MattSizzle

+0

'if(ref $ hashref - > {OrganizationName} eq'HASH')'對於hashref測試已經足夠了。 –

+0

@mpapec如果它不是ref,那麼會將一個字符串與'undef'進行比較的警告。假設你已經啓用了'使用警告'。 – jordanm