From: Kripa Sundar <[EMAIL PROTECTED]>
Date: Mon, 23 Aug 2004 16:15:07 -0400
Hello all,
I am clearly overlooking something basic, but I can't wrap my
head around the parse error in the second command below.
It is apparently caused when the the only contents of a map()
BLOCK is a list without parens.
|| % perl -le 'print map {1; 1, 2} qw(a b)'
|| 1212
|| %
|| % perl -le 'print map {1, 2} qw(a b)'
|| syntax error at -e line 1, near "} qw(a b)"
|| Execution of -e aborted due to compilation errors.
|| %
|| % perl -le 'print map {(1, 2)} qw(a b)'
|| 1212
|| %
|| % perl -v | grep built
|| This is perl, v5.6.0 built for sun4-solaris
|| %
But this also works:
[EMAIL PROTECTED]> perl -le 'print map {+1, 2} qw(a b)'
1212
[EMAIL PROTECTED]> perl -v | fgrep built
This is perl, v5.8.1 built for i586-linux-thread-multi
[EMAIL PROTECTED]>
As this doc excerpt (from "map" on "perlfunc") says it should:
"{" 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.
<rant> Personally, I find this sort of "magic syntax" crap really
annoying. Being an old Lisp hacker, I would have preferred that map
always take a functional; then there's no syntax guesswork. But, being
an old Lisp hacker, I also realize that I'm just a lone voice crying in
the wilderness . . . </rant>
-- Bob Rogers
http://rgrjr.dyndns.org/
_______________________________________________
Boston-pm mailing list
[EMAIL PROTECTED]
http://mail.pm.org/mailman/listinfo/boston-pm