On Mon, Nov 2, 2009 at 9:53 AM, Moritz Lenz <mor...@faui2k3.org> wrote:
> Hi,
>
> the current spec doesn't allow immutable containers to call .map with a
> block that implicitly uses $_ as an implicit parameter.
>
> Here's why:
>
> S06 says
>
>> The C<$_> variable functions as a placeholder in a block without any
>> other placeholders or signature.  Any bare block without placeholders
>> really has a parameter like this:
>>
>>     -> $_ is rw = OUTER::<$_> { .mumble }
>
> So $_ is marked as rw, which is checked at binding time.
>
> Now lists are immutable, meaning that you can't bind a list item rw, so
> even if the block doesn't try to modify $_, calling the { .say } block
> fails.
>
> (Note that 'for' has the same problem)
>
> How should that be resolved? Should a temporary variable be created that
>  can be changed, without any effect? or should it fail() on detecting a
> modification? Somehow this approach seems very backward to me...

Is there a reason $_ is readonly isn't a possible solution?

-- 
Solomon Foster: colo...@gmail.com
HarmonyWare, Inc: http://www.harmonyware.com

Reply via email to