in reply to incorrect output
in thread foreach loops

That's the correct output. You may be misunderstanding this line:
@a = {1, 2, 3, 4, 5};
This line creates an anonymous hash by taking pairs of elements to create individual hash elements. With warnings enabled, you'd have also have been notified that the element "5" has no pair to take with it, so the hash is also improperly specified. Then the reference to this new anonymous hash becomes the sole element of the array @a.

Perhaps you wanted:

@a = (1, 2, 3, 4, 5);

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.