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回再パットします。投稿に含まれる行の数によって異なります(行は動的に送信されます)が、投稿を1回だけ印刷する必要があります...

4

2 に答える 2

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 に答える
1

結果の少なくとも 1 行が 1 行に等しい限り、一度だけ印刷したいようです。

それが正しければ、コードに次の簡単な変更を加えることができます。

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

これは、一致するものが 1 つ見つかるとすぐにループを終了します。

他の理由でループ全体を完了する必要がある場合は、M42 のソリューションを使用してください。

于 2013-02-19T13:38:23.077 に答える