use strict; use warnings; my (@data1,@data2); my (@array,@array2); open my $fh, '<', 'Text1' or die "Could not open file to read:$!"; while (<$fh>) { if (/^\Entry (\w+)/../\EOE/){ push @array, $_; if (/^(\Entry)/){ push @data1 ,$1; } } } open $fh, '<', 'Text2' or die "Could not open file to read:$!"; while (<$fh>) { if (/^\Entry (\w+)/../\EOE/){ push @array2, $_; if (/^(\Entry)/){ push @data2 , $1; } } } print @array2; my $size = @data1 < @data2 ? @data1 : @data2; my $result= @data1 < @data2 ? "File 1 has missing data" : "File 2 has missing data"; my $ori = @data1 == @data2 ? 1:0; my $i; for( $i = 0; $i < $size; $i++){ if ($data1[$i] ne $data2[$i]){ printf "%s is mismatch with %s\n",$data1[$i],$data2[$i]; } else { &compare(); } } print "$result\n" if (!$ori);