both work as expected (i.e, return the elements of @foo interlaced with ones)

To further confuse the issue, this error cropped up several times in a set of otherwise completely functional scripts, leading me to wonder if this is a change (/me avoids using the word "bug") in 5.6, which I believe the scripts predate.
Any thoughts?

Perl has to guess whether the open curly brace after the map is the beginning of an anonymous array constructor or a block, since it could be both. It does this by "peeking ahead" a bit to see what's there.

I've learned to force it to guess right when needed by either putting a plus in front of the open curly (for the anonymous hash flavor) or a semicolon immediately after the open curly (for a block). Pretty rare to need that, but when I do, it's handy that I recall those tricks. I first learned of that from perlref.

If this is a new problem it seems that it may have something to do with the current prototype system.

If map was declared map (&@) {} then all the constructs above would work
(since the first argument is always interpreted as a code block/ref and I've tested it with a custom map under 5.6), except that the other map syntax
map EXPR, list as opposed to the one under discussion map BLOCK list would not work.

I can't work out how to use the EXPR syntax for user-defined subs (perlsub suggests grep is (&@) which wouldn't work
since the first argument to grep can be a block or an re). So map must be a special case in the perl internals
but the code that determines must as merlyn says be unable to determine what it should be using when the braces can have two meanings.
If map is really special cased then this problem could probably be fixed if there was any real need, for now use {; } as merlyn suggested of create a wrapper for map which does have a prototype of (&@).