At first glance, $foo will end up holding a map and an inverted map drawn from @a. Looks like a long-winded way of saying
%foo = (@a, reverse @a);
In which case $foo{"c"} would be 3.
On second glance, first glance was wrong, wrong, wrong. It's
%foo{@a} = reverse @a;