$item is getting set to 'A', 'B' and 'C' because you're sorting the hashkeys. The warning indicates that letters are invalid array indexes. The real problem here however is that you're getting correct behavior in this case accidentally, perhaps perl is trying to be DWIMy. As an experiment, try declaring @data like:
my @data = (,[
You'll find that perl is simply pushing the arrays in your hashtable onto the first embedded array that it finds. The solution therefore is not to use the output of your sorting routine to identify the array you wish to push to.
"The dead do not recognize context" -- Kai, Lexx