perl数组不正确地为索引赋值(保持覆盖相同的索引)

时间:2013-10-19 02:10:14

标签: arrays perl unix md5 md5sum

我正在将目录的文件读入数组。从那里,我想从数组计算每个文件的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

2 个答案:

答案 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";
}