我正在将目录的文件读入数组。从那里,我想从数组计算每个文件的md5sum并将带有filename的指纹存储到另一个数组中。出于某种原因,使用以下代码,我的脚本似乎会在第二个数组(@ 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
答案 0 :(得分:0)
在第二个循环中,您将使用最新md5sum
输出的行覆盖数组。
我想到了两种可能的解决方案:
将新行推到数组的末尾:push(@md5, qx"md5sum $file");
要么
将每个新的行数组存储在一个包含的哈希或数组中:@md5{$file} = qx"md5sum $file" );
我想你正在尝试第一次。
答案 1 :(得分:0)
按照与文件数组相同的顺序将md5 sum推入数组
#!/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";
}