in reply to Is this a perl compiler bug?

You need to add a unary + in there to help perl figure out that you want the map BLOCK LIST syntax and not the map EXPR, LIST syntax. So,
map { +"$_" => undef } ();
This is the relevant section from the perldoc -f map docs:
  "{" starts both hash references and blocks, so
  "map { ..." could be either the start of map BLOCK
  LIST or map EXPR, LIST. Because perl doesn't look
  ahead for the closing "}" it has to take a guess
  at which its dealing with based what it finds just
  after the "{". Usually it gets it right, but if it
  doesn't it won't realize something is wrong until
  it gets to the "}" and encounters the missing (or
  unexpected) comma. The syntax error will be
  reported close to the "}" but you'll need to
  change something near the "{" such as using a
  unary "+" to give perl some help:

      %hash = map {  "\L$_", 1  } @array  # perl guesses EXPR.  wrong
      %hash = map { +"\L$_", 1  } @array  # perl guesses BLOCK. right

Replies are listed 'Best First'.
Re^2: Is this a perl compiler bug?
by bollock (Initiate) on Aug 24, 2005 at 11:57 UTC
    Thanks.
    My problem was that I didn't even know that the form
      map EXPR, LIST
    existed at all :-)