0

我正在将目录的文件读入数组。从那里,我想从数组中计算每个文件的 md5sum 并将带有文件名的指纹存储到另一个数组中。出于某种原因,使用以下代码,我的脚本似乎一直在覆盖我的第二个数组 (@md5) 中的相同索引,而不是将每个 md5sum 存储到单独的索引中。我的代码有什么问题?输出在这篇文章的底部。

#!/usr/bin/perl -w

@files = <*>;

foreach $file (@files) {
print $file . "\n";
}

foreach $file (@files) {
@md5 = `md5sum $file`;
$x++;
}

foreach $entry (@md5) {
print $entry . "\n";
}

输出

./mymd5.pl

ddiff.pl
mymd5.pl
mymd5.pl.save
mymd5.pl.save.1
plgrep.pl
d41d8cd98f00b204e9800998ecf8427e  plgrep.pl
4

2 回答 2

0

在第二个循环中,您将使用最新输出的行覆盖数组md5sum

想到2个可能的解决方案:

将新行推送到数组的末尾:push(@md5, qx"md5sum $file"); 或将每个新的行数组存储在包含哈希或数组中:@md5{$file} = qx"md5sum $file" );

我在想你正在努力争取第一名。

于 2013-10-19T02:20:08.923 回答
0

将您的 md5 和以与文件数组相同的顺序推送到数组中,

#!/usr/bin/perl -w
use strict;
 @files = <*>;
foreach $file (@files) {
print $file . "\n";
}
foreach $file (@files) {
push(@md5,`md5sum $file`); #md5[n] has sum for file[n]
}
foreach $entry (@md5) {
print $entry . "\n";
}
于 2013-10-19T02:21:10.450 回答