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.