2010-04-18 3 views
3

perl 문서를 읽었습니다. 그러나 해시를 둘러싼 내 머리를 터지게 할 수는 없습니다. 나는 해시 키가 존재 하는지를 알아 내려고하고있다. 그렇다면 그 값을 비교하라. 나를 혼란스럽게하는 것은 내 검색에서 키가 존재하는 경우 if (exists $files{$key})을 찾았지만 $files{$key}도 값을 제공한다고 말합니다. 내가 작업하고있는 코드는 다음과 같습니다.perl hashes - 키와 값을 비교합니다.

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 또는 '' (빈 문자열)과 같이 부울 문맥에서 false 인 경우 어떻게됩니까?

해시 같이 생각해

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

내가 if ($foo{blue}) 말한다면 조건이 실패합니다. blue이 해시에 존재하더라도 $foo{blue} 값이 0이므로 조건은 거짓입니다. greenyellow 키와 동일 - 빈 문자열 및 undef은 false 값입니다.

exists이 없으면 실제로 해시 키가 실제로 있고 값이 false인지 아니면 전혀 존재하지 않는지를 쉽게 판단 할 수 없습니다. (전화 번호는 keys이고 전화 번호는 grep입니다.하지만 그건 터무니 없습니다.)

코드가 완벽하게 멋지게 보입니다. exists을 올바르게 사용하고 있습니다.

+0

@friedo 문제를 일으키는 구문 오류가 있다는 것을 깨달았습니다.하지만 설명해 주셔서 감사합니다. –

관련 문제