in reply to use of uninitialized value in array

You are getting the last index for the array 1 past the end of the array.
for($a=0;$a<=scalar(@hfr);$a++)
That should be:
for($a=0;$a<scalar(@hfr);$a++)
And you could also leave out the scalar because the @hfr array is being used in a scalar context and doesn't need to be cast explicitly to scalar.

There seem to be some other problems as well.

my @matching_indices=indexes {$hfr[$a]}@gl;
I think this should be
my @matching_indices=indexes {$hfr[$a]eq $_}@gl;
I'm not sure the other statements will give the result you want. For example, print "$matching_indices[$a]"; is using the loop index and most likely index beyond the bounds of the array, also a possible source of the 'use of uninitialized value in array' warning.