perl哈希 - 比较键和值

Aar*_*die 3 perl

我一直在阅读perl doc,但我无法理解哈希.我试图找到是否存在哈希键,如果存在,则比较其值.令我困惑的是,我的搜索说你发现密钥是否存在if (exists $files{$key}),但是这$files{$key}也给出了价值?我正在处理的代码是:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

fri*_*edo 9

$files{$key}确实会返回该键的值.但是如果在布尔上下文中该值恰好是假的,比如0''(空字符串)怎么办?

考虑这样的哈希:

my %foo = ( red => 42, blue => 0, green => '', yellow => undef );
Run Code Online (Sandbox Code Playgroud)

如果我说if ( $foo{blue} )这种情况会失败.即使blue存在于散列中,条件也是假的,因为值$foo{blue}为零.与greenyellow键相同- 空字符串并且undef是错误值.

如果没有exists,就没有(简单的)方法来确定散列键实际上是否实际存在且其值为false,或者它是否根本不存在.(你可以打电话keys,然后调grep出结果列表,但这太荒谬了.)

你的代码对我来说非常好.你exists正确使用.