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 ;
|
|---|