02.09.2015, 10:46, "The Sidhekin" <sidhe...@gmail.com>:
>>  So it seems that perl6 handles lexicals inside while (<>){} one-liners 
>> differently.
>
>    Ah, yes.  Interesting.  Run-time effect of C<my> not happening repeatedly. 
>  How would that deparse?


Good question, I wouldn't be surprised that -n switch has some kind of special 
behavior.


>  $ seq 3 | perl6 -e 'for lines() { my %d; %d{$_}++; END { say keys %d } }'
>  3
>  $ seq 3 | perl6 -e 'for lines() { state %d; %d{$_}++; END { say keys %d } }'
>  1 2 3
>  $
>
>    … and while I'm comparing:
>
>  $ seq 3 | perl6 -e 'for lines() { my %d; %d{$_}++; END { say keys %d } }'
>  3
>  $ seq 3 | perl -E 'while (<>) { my %d; $d{$_}++; END { say keys %d } }'
>  1
>
>    … I need me a new mental model. :-)

I think this is covered somewhere in RFC; perl6 repeatedly overwrites END{} 
block where last one references last %d definition (say %d.WHICH).
perl5 on the other hand stays with first END{} block (say \%d).


Reply via email to