use strict; my $file1 = "data1.txt"; my $file2 = "data2.txt"; my $raw_data1 = Slurp_File($file1); my $raw_data2 = Slurp_File($file2); my (@sections1) = ($raw_data1 =~ m/()/sig); my (@sections2) = ($raw_data2 =~ m/()/sig); my %parsed_file; foreach my $section (@sections2) { my ($id,@parsed_data) = Parse_Section($section); foreach my $alias (@parsed_data) { $parsed_file{$id}{$alias}++; } } foreach my $section (@sections1) { my ($id,@parsed_data) = Parse_Section($section); foreach my $alias (@parsed_data) { if (!$parsed_file{$id}{$alias}) { print "HostID: $id, Host-Alias: $alias was missing from file '$file2'\n"; } } } ############ sub Slurp_File { my $file = shift; my $data; open(DATA,"<",$file) || die "Unable to open file '$file': $!\n"; { local $/; $data = ; } close(DATA); return $data; } sub Parse_Section { my $data = shift; my ($id) = ($data =~ m/id=\"(.+?)\"/i); my (@alias) = ($data =~ m/host-alias>(.+?)