On 21 Jan 2002, at 15:12, Simon Cozens wrote:

> On Mon, Jan 21, 2002 at 03:00:57PM +0000, Robin Houston wrote:
> > In an ideal world it would behave the same as
> >   %a = (%b, %c);
> >   for my $k (keys %a) {
> >       $a{$k} += $b{$k} if exists($b{$k}) && exists($c{$k});
> >   }
> 
> It's not impossible that it would end up doing just that.

Is that right? --- that is, add b to a on condition of c, but the actual 
value from the c hash isn't used at all, and a is *incremented* even 
though it looks like an assignement [you removed it from your followup, 
but I think the original was:
    %a = %b ^+ %c
That's *REALLY unintuitive [at least to me] to have it work with the 
above semantics.

I hadn't heard of it before, but I got the impression taht '^' was going 
to be like a vector operation, and so you'd have
   %a = %b ^+ %c
as being like:
   undef %a ;
   for my $k (keys %b)
   {   $a{$k} = $b{k} + $c{k} if exists $c{k} ; }
[this being a sort of inner-join, and if you like you could have 
something like an outer-join, where the non-exists element of the other 
hash would be treated as a '0'.]

Did I misunderstand what '^' is supposed to do?  [I thought that the 
original example, @a = @b ^+ @c did an element-by-element add of b to c, 
was that not right?]

  /Bernie\

-- 
Bernie Cosell                     Fantasy Farm Fibers
mailto:[EMAIL PROTECTED]     Pearisburg, VA
    -->  Too many people, too few sheep  <--          

Reply via email to