0

我对这部分的代码有疑问:

foreach my $line(keys %results){
     print Dump($post) if $results{$line} == 1;
}

我只需要打印一次'print Dump($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 包含与它相同的行,但由于哈希的原因,如果我逐行打印,我会得到随机行...

如果我运行代码,它将重新打印打印的帖子 4-5 次,这取决于帖子中有多少行(行是动态的),但我需要只打印一次帖子......

4

2 回答 2

1

听起来您只想打印一次,只要您的结果中至少有一行等于 1。

如果这是正确的,您可以对您的代码进行以下简单修改:

foreach my $line(keys %results){
     if ($results{$line} == 1)
     {
          print Dump($post);
          last;
     }
}

一旦找到匹配项,这将退出循环。

如果您因为其他原因需要完成整个循环,请使用 M42 的解决方案。

于 2013-02-19T13:38:23.077 回答
1

怎么样:

my $dump_done = 0;
foreach my $line(keys %results){
    if ($results{$line} == 1 and !$dump_done) {
        print Dump($post);
        $dump_done = 1;
    }
}
于 2013-02-19T13:35:18.157 回答