我对这部分的代码有问题:
foreach my $line(keys %results){
print Dump($post) if $results{$line} == 1;
}我需要它只打印一次‘打印转储($post)’
这就是所有的部分
my $f1 = "/home/shaman/Desktop/data.txt";
my $f2 = "/home/shaman/Desktop/ini.txt";
my %results = ();
open FILE1, "$f1" or die "Could not open file: $! \n";
while(my $line = <FILE1>){
$results{$line}=1;
}
close(FILE1);
open FILE2, "$f2" or die "Could not open file: $! \n";
while(my $line =<FILE2>) {
$results{$line}++;
}
close(FILE2);
foreach my $line(keys %results){
print Dump($post) if $results{$line} == 1;
}$post包含相同的行,但由于散列的原因,如果我逐行打印,我会得到随机行…
如果我运行代码,它将重新打印post 4-5次,这取决于它的post中有多少行(行来二次),但我需要post只打印一次…
发布于 2013-02-19 21:35:18
这样如何:
my $dump_done = 0;
foreach my $line(keys %results){
if ($results{$line} == 1 and !$dump_done) {
print Dump($post);
$dump_done = 1;
}
}发布于 2013-02-19 21:38:23
这听起来像是您只想打印一次,只要您的结果中至少有一行等于1。
如果这是正确的,您可以对您的代码进行以下简单的修改:
foreach my $line(keys %results){
if ($results{$line} == 1)
{
print Dump($post);
last;
}
}一旦找到一个匹配项,它就会退出循环。
如果您出于其他原因需要完成整个循环,请使用M42的解决方案。
https://stackoverflow.com/questions/14957965
复制相似问题