in reply to shift vs. @_ (where @_ evaluates to 1)

You finction can be written more simply as

sub getFoo{ my ($x,$y) = @_; $x . '_' . $y . '_testme.xml'; }
or just:
sub getFoo{ sprintf '%s_%s_testme.xml', @_; }
Notice that the package global names $a and $b are not used. It's best to preserve them for sort.

After Compline,
Zaxo