>
>     temp %h;
>     %h{ %other.keys } = %other.values;
>
> or even
>
>     temp %h{ %other.keys } = %other.values;
>
> should work well already?

Almost - but not quite.

In Perl5
perl -MData::Dumper -e '%h=qw(a 1 b 2); {local %h; $h{a}="one"; print Dumper 
\%h} print Dumper \%h;
$VAR1 = {
          'a' => 'one'
        };
$VAR1 = {
          'a' => '1',
          'b' => '2'
        };

I'm imaging the behavior would be the same with Perl6.  Notice that 'b' is 
gone in the first print.  I only want to temporarily modify "some" values 
(the ones from the %other hash).  I don't want the contents of the %h to be 
identical to %other - I already have %other.

So in Perl5 this does work:

perl -MData::Dumper -e '%h=qw(a 1 b 2); {local %h=%h; $h{a}="one"; print 
Dumper \%h} print Dumper \%h;
$VAR1 = {
          'a' => 'one'
          'b' => '2',
        };
$VAR1 = {
          'a' => '1',
          'b' => '2'
        };
But this won't work in Perl6 (temp $var = $var doesn't work in Perl6) and 
again it may be fine for small hashes with only a little data - but for a 
huge hash (1000+ keys) it is very inefficient.

This is good discussion - but it isn't the real focus of the original message 
in the thread - the question is about the local (temp) scoping of looping 
statement modifiers in Perl6.

Though, I do appreciate your trying to get my example working as is.

Paul

Reply via email to