Here's a first pass at cleaning up the main loop of your code. It's not tested, so don't trust it, but it ought to do exactly the same thing, faster.

The code is easier to read this way. So easy that I can see a BUG! (I left it in with a comment).

The program could be made even clearer and further optimized, but this is a start. For example you can replace all the print DAT $c; with $all .= $c; and, wait till the end to open the file for append, print DAT $all;, and close.

By the way, if you can, you should test this in a standalone program on your computer, not just on the web.

# 1. Only open/close the file once to append, instead of $maxid times. # 2. Use temporary values. # 3. Delete stuff you don't need immediately, not next time around loo +p. # 4. In this case, ($c) is same as (defined $c) (cosmetic). open(DAT,">>data/parsed-all.txt"); for(my $i = 1; $i <= $maxid; $i++) { my $currid = changeID($i); my ($c1,$c2,$c3) = ($compare1{$currid}, $compare2{$currid}, $compare +3{$currid}); delete $compare1{$currid}, $compare2{$currid}, $compare3{$currid}; next if( $c1 && $c2 && $c3 && $c1 ne $c2 && $c1 ne $c3 && $c2 ne $c3 + ); if( $c1 && !$c2 && !$c2 ) { print DAT $c1; next; } if( $c2 && !$c1 && !$c3 ) { print DAT $c2; next; } if( $c3 && !$c1 && !$c2 ) { print DAT $c2; # <-- BUG HERE! next; } if( $c1 && $c2 ) { if( $c1 eq $c2 ) { print DAT $c1; next; } } if( $c1 && $c3 ) { if( $c1 eq $c3 ) { print DAT $c1; next; } } if( $c2 && $c3 ) { if( $c2 eq $c3 ) { print DAT $c2; next; } } } close(DAT);

In reply to Re^4: Comparing lines of multiple files by Tortue
in thread Comparing lines of multiple files by oomwrtu

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.