Cool idea but if you read the question carefully:
# print $fn, $ln and $id to OUTPUT_A if $id = @a[0,1,2...n]
# elsif print $fn, $ln and $id to OUTPUT_B if $id = @b[0,1,2...n]
# elsif print $fn, $ln and $id to OUTPUT_C if $id = @c[0,1,2...n]
The way you are doing it both Homer and Clark end up in "b.txt". The way the question was written Homer should wind up in "a.txt" and Clark in "b.txt". All you have to do is reverse the order you fill your
%data hash.
@data {@c} = ($fh_c) x @c;
@data {@b} = ($fh_b) x @b;
@data {@a} = ($fh_a) x @a;
Now the code works as the question was asked.