2

我正在尝试做的事情:

将文件及其 md5 哈希值存储到哈希中,在添加或删除文件时更改哈希。

到目前为止,我能够存储 md5 哈希并在添加文件时更新哈希。但是我不确定如何删除已删除文件的密钥

我现在的方法是:

将数组转换为哈希进行比较

my %files = map { $_ => 1 } @files;

检查它们是否相同

if (%files ~~  %hash).. same.. else... different

我不确定如何进一步实现这一点..这是我的想法:

删除哈希中不再有文件的键(伪代码)

Where exists $hash{$_} && !exists $files{$_} delete $hash{$_}
4

2 回答 2

4

只需循环一个,并检查是否存在并删除...

foreach my $k ( keys %file ) {
  delete $hash{$k} if exists $hash{$k};
}

此外,由于在为此目的使用哈希时的内部结构,您最好分配undef而不是分配1给它。为简单起见保留原因。

my %files = map { $_ => undef } @files;

我不确定条件是否使它更快或更慢 - 这可能无关紧要。

于 2012-05-30T20:14:59.870 回答
2

您无需创建散列来比较列表。看看List::Compare。特别是, get_unique() 和 get_complement() 方法将识别仅出现在两个列表之一中的项目。

于 2012-05-30T20:12:09.793 回答