Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- my @a = ("a", "b", "c", "d", "e");
- my %h = map { "prefix-$_" => 1 } @a;
- Not enough arguments for map at foo.pl line 4, near "} @a"
- my @a = ("a", "b", "c", "d", "e");
- my %h = map { "prefix-" . $_ => 1 } @a;
- my @a = ("a", "b", "c", "d", "e");
- my %h = map { +"prefix-$_" => 1 } @a;
- my %h = map { ("prefix-$_" => 1) } @a;
- "{" 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!
- %hash = map ( lc($_), 1 ), @array # evaluates to (1, @array)
- or to force an anon hash constructor use "+{"
- @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end
- and you get list of anonymous hashes each with only 1 entry.
- my @a = qw( a b c d e );
- my %h;
- @h{@a} = ();
- @h{@a} = (1) x @a;
- @h{$_} = 1 for @a;
- map { ; "prefix-$_" => 1 } @a;
Add Comment
Please, Sign In to add comment