0002,Nunki 2 2,6366,59%,0.59,3755.94,Honor,-23,-19 0005,Nunki 2 5,2615,24%,0.24,627.6,Bananiel,-44,-47 0010,Sagittarius 2 5,3414,75%,0.75,2560.5,Iridium,0,-45 0013,Rigel 2 1,6870,30%,0.3,2061,Black_Dragon,-44,95 0014,Rigel 2 2,5000,50%,0.5,2500,Black_Dragon,-35,102 0015,Rigel 2 3,2854,51%,0.51,1455.54,Bananiel,-30,96 0018,Rigel 2 6,4160,59%,0.59,2454.4,Khouri,-49,75 0019,Rigel 2 7,5801,18%,0.18,1044.18,ThrevenGuard,-69,103 0023,Fornacis 2 4,5483,52%,0.52,2851.16,unoccupied #### use warnings; use strict; use strict; use warnings; use CGI qw(:standard); use CGI::Carp qw(warningsToBrowser fatalsToBrowser); my $file2 = < file1.txt"; print outFile $file1; close outFile; open outFile, "> file2.txt"; print outFile $file2; close outFile; #OP's code print "Cache-Control: max-age=30\n"; my %final; my %compare1; my %compare2; my $maxid = "2000"; open(DAT,"file1.txt"); my @data = ; close(DAT); for(my $i = 0; $i < scalar(@data); $i++) { # dump file data into hashed array my $id = substr($data[$i], 0, 4); # get current planet id $compare1{$id} = $data[$i]; delete $data[$i]; } @data = (); open(DAT,"file2.txt"); @data = ; close(DAT); for(my $i = 0; $i < scalar(@data); $i++) { # dump file data into hashed array my $id = substr($data[$i], 0, 4); # get current planet id $compare2{$id} = $data[$i]; delete $data[$i]; } @data = (); open(DAT,">parsed-all.txt"); # open appropriate parsed file and clear it close(DAT); for(my $i = 1; $i <= $maxid; $i++) { my $currid = changeID($i); next if ! defined $compare1{$currid} and ! defined $compare2{$currid}; next if defined $compare1{$currid} and defined $compare2{$currid} and $compare1{$currid} eq $compare2{$currid}; open(DAT,">>parsed-all.txt"); if (defined $compare1{$currid}) {print DAT $compare1{$currid};} else {print DAT $compare2{$currid};} close(DAT); delete $compare1{$currid}; delete $compare2{$currid}; } exit; sub changeID { return sprintf "%04d", $_[0]; }