I think that you are making this too complicated. Lets see if we can understand the real problem, You have two files that have some common fields between them, you want to see which file has something the other file doesn't. Taking your file information from above,
File 1,
1141286452,ServerA,Disk Full,Arb data,other,stuff
1141286737,ServerB,Net Down,Arb data,other,stuff
1141286737,ServerC,Disk Full,Arb data,other,stuff
File2,
1141286737,ServerB,Net Down
1141286780,ServerD,Bit Bucket Missing
You can probably boil this down to the data that you want to string that would be,
File 1,
1141286452,ServerA,Disk Full
1141286737,ServerB,Net Down
1141286737,ServerC,Disk Full
File2,
1141286737,ServerB,Net Down
1141286780,ServerD,Bit Bucket Missing
Now lets take the data that you want to compare and stick in a hash. The value assigned in the hash relates to which file it came from. 1 means it came from file 1, 2 from file 2 and 3 means from file 1 and 2.
my %index;
foreach my $entry (@file1) {
if (not exists $index{$entry}) {
$index{$entry} = 1
}
}
foreach my $entry (@file2) {
if (not exists $index{$entry}) {
$index{$entry} = 2
}
else {
$index{$entry} += 2;
}
}
foreach my $entry (keys %index) {
if ($index{$entry} == 1) {
print "Entry $entry is only in file one\n";
}
elsif ($index{$entry} == 2) {
print "Entry $entry is only in file two\n";
}
elsif ($index{$entry} == 3) {
print "Entry $entry is in both files\n";
}
else {
print "Entry $entry is screwed up!\n";
}
}
Now you have a hash with all the unique entries and what files that they came from. Which is what I assume that you really want.