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]; }