in reply to Arrays of hashes which have arrays

The only difference is the way in which the array element is selected...

Another difference is that the second one doesn't have a concatenation operator right after print. Using B::Deparse (with -p), we see that it is interpreted this way:

foreach my($xy) (@$tmp) { ((print($_) . ', ') . $xy); }

Remove that dot, and it should work the way you want it to.