One thing you could to is to add the following line near the top:
and, then, right after closing the $HUBFILE file handle, to print out the content of the @hubs array:use Data::Dumper;
to see the actual content of @hubs after having read the input file.print Dumper \@hubs;
My guess is that you'll also see only one record there, which would confirm that regex probably needs some change.
Another thing you could do is to try to make the regex less strict about what it sees (maybe you don't have tabs, but spaces somewhere in your input):
Finally, it would be useful if you posted a sample of your input data between <c> and </c> tags, so that we get a better idea of what this input really looks like.push @hubs, $1 if $line =~ /\d+ \s+ (\w+) \s+/x;