in reply to map problem
Not a bug (really) and not stupid, just a subtle foible of Perl that bites occasionally. From the perlfunc documentation for map:
{ 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
- %hash = map { ("\L$_", 1) } @array # this also works
- %hash = map { lc($_), 1 } @array # as does this.
- %hash = map +( lc($_), 1 ), @array # this is EXPR and works!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: map problem
by Marshall (Canon) on Mar 09, 2012 at 13:43 UTC | |
by talexb (Chancellor) on Mar 09, 2012 at 17:44 UTC | |
by Marshall (Canon) on Mar 09, 2012 at 18:17 UTC | |
by moritz (Cardinal) on Mar 09, 2012 at 21:00 UTC | |
by Marshall (Canon) on Mar 09, 2012 at 21:46 UTC |