in reply to map syntax bug-a-boo?

Now, brethren and sistern, let's all charitabley agree to stipulate that the horrid "map in a void context" was merely for the purpose of reducing the problem to its bare essentials.

It would appear that, because of what you have put inside the {...}, Perl is taking that to be an expression and thus needing a comma after it.

use strict; my @l = 1..10; map { 1, 2 }, @l; map { "$_", 2 }, @l;
does not produce errors. And if you say:
print map { 1, 2 }, @l; print map { "$_", 2 }, @l;
you will see a bunch of hash-refs. So Perl is seeing {1,2} as an anonymous hash rather than as a BLOCK that happens to return something. (A very reasonable reading now that we look at it that way.)

------------------------------------------------------------
"Perl is a mess and that's good because the
problem space is also a mess.
" - Larry Wall

Replies are listed 'Best First'.
(MeowChow) Re: map syntax bug-a-boo?
by MeowChow (Vicar) on Nov 30, 2001 at 09:13 UTC
    I was thinking along the same lines, but the fact that the following does work seems to contradict this argument, or at least imply that it's not the whole story:
    map { $_, 2 } @l;
    Though, now that I think about it, all this probably reflects a perl heuristic/optimization in the parser which says something along the lines of "if, within the bracketed expression, I see a constant and then a comma, I'm going to assume the expression is a hash, and not a block, no matter what comes afterwards...."
       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print