【发布时间】:2013-12-25 16:46:43
【问题描述】:
我在这里查看此链接:How could I write a Perl script to calculate the MD5 sum of every file in a directory?
获取指定目录下每个文件的md5。我想要做的是把那些 md5 和一个数组进行比较。这是我目前所拥有的。
use warnings;
use strict;
use Digest::MD5 qw(md5_hex);
my $dirname = "./";
opendir( DIR, $dirname );
my @files = readdir(DIR);
closedir(DIR);
print "@files\n";
foreach my $file (@files) {
if ( -d $file || !-r $file ) { next; }
open( my $FILE, $file );
binmode($FILE);
print Digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
my @array = ('667fc8db8e5519cacbf8f9f2af2e0b08');
if (@array ~~ $FILE) {
print "matches array", "\n";
} else {
print "doesnt match array", "\n";
}
}
system ( 'pause' )
但是有了这个,我总是得到不匹配数组,无论它是否完全匹配数组。我可以print @array,它甚至会显示文件的相同 md5 值。但就像我说的那样,它总是说“不匹配数组”。我从来没有在任何文件上说“匹配数组”。感谢您的关注:)
编辑: 这就是我现在所拥有的。
use warnings;
use strict;
use Digest::MD5 qw(md5_hex);
my $dirname = "./";
opendir( DIR, $dirname );
my @files = readdir(DIR);
closedir(DIR);
print "@files\n";
foreach my $file (@files) {
next if -d $file || !-r $file;
open( my $FILE, $file );
binmode($FILE);
#print digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
Sdigest = Digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
my @array = ('667fc8db8e5519cacbf8f9f2af2e0b08');
if($digest eq $array[0]) {
print "matches array", "\n";
} else {
print "doesnt match array", "\n";
}
}
system ( 'pause' );
感谢大家的帮助。你们太棒了;)
【问题讨论】:
-
修正格式。用奇怪的缩进很难说出这里发生了什么。
-
好吧,我现在就这么做。谢谢
-
确定要匹配数组的第一个元素吗? $array[0]
-
您希望将十六进制摘要匹配到数组的第一个元素,而您将文件句柄匹配到整个数组。
-
为什么你需要一个数组,当你只有一个你有兴趣比较的值时?
标签: arrays perl directory compare md5