On Friday 15 April 2005 11:57 am, Juerd wrote:
> Paul Seamons skribis 2005-04-15 11:50 (-0600):
> > my %h = <a 1 b 2 c 3>;
> > {
> >   temp %h{$_} ++ for %h.keys;
>
> Just make that two lines. Is that so bad?
>
>     temp %h;
>     %h.values ++;
>

For the given example, your code fits perfectly.  A more common case I have 
had to deal with is more like this:

my %h = <a 1 b 2 c 3>
my %other = <a one b two>;
{
  temp %h{$_} = %other{$_} for %other.keys;
  %h.say;
}

Ideally that example would print
a    one
b    two
c    3

It isn't possible any more to do something like
{
  temp %h = (%h, %other);
}
because that second %h is now hidden from scope (I forget which Apocalypse or 
mail thread I saw it in).  Plus for huge hashes it just isn't very efficient.

I'd like to temporarily put the values of one hash into another (without 
wiping out all of the modfied hashes values like "temp %h" would do), run 
some code, leave scope and have the modified hash go back to normal.  In 
perl5 I've had to implement that programatically by saving existing values 
into yet another hash - running the code - putting them back.  It works but 
there is all sorts of issues with defined vs exists.

So yes - your code fits the limited example I gave.  But I'd still like the 
other item to work.

Paul

Reply via email to