in reply to strange map behavior

This looks like syntax error with map in list context. The documentation for map says "{ starts both hash references and blocks, so map { ... could be either the start of map BLOCK LIST or map EXPR, LIST." This syntax works as well as the one you discovered:

my %h = map { +"$_" => "$_" } @arr ;