2010-04-18 99 views
3

我一直在閱讀perl文檔,但我無法完全理解哈希。我試圖找到一個散列鍵是否存在,如果是的話,比較它的值。讓我感到困惑的是,我的搜索說你發現如果一個關鍵字存在if (exists $files{$key}),但該$files{$key}也給出了價值?我正在處理的代碼是:perl散列 - 比較鍵和值

foreach my $item(@new_contents) { 
    next if !-f "$directory/$item"; 
    my $date_modified = (stat("$directory/$item"))[9]; 

    if (exists $files{$item}) { 
     if ($files{$item} != $date_modified { 
      $files{$item} = $date_modified; 
      print "$item has been modified\n"; 
     } 
    } else { 
     $files{$item} = $date_modified; 
     print "$item has been added\n"; 
    } 
} 

回答

9

$files{$key}確實會返回該密鑰的值。但是如果這個值恰巧在布爾上下文中是錯誤的,例如0''(空字符串)呢?

考慮散列這樣的:

my %foo = (red => 42, blue => 0, green => '', yellow => undef); 

如果我說if ($foo{blue})條件會失敗。即使blue存在於散列中,但條件爲假,因爲$foo{blue}的值爲零。與​​和yellow鍵相同 - 空字符串和undef是錯誤的值。

如果沒有exists,就沒有(簡單的)方法來確定一個散列鍵實際上是否真的存在並且它的值是假的,或者它根本不存在。 (您可以撥打電話keys,然後grep結果列表,但這很荒謬。)

您的代碼看起來非常好。您正確使用exists

+0

@friedo我意識到這是一些語法錯誤,給我的問題,但謝謝澄清,讓事情更清晰! – 2010-04-18 08:17:20