in reply to Re: Using += in array context
in thread Using += in array context
update: set fields a and z in right place#!/opt/perl/bin/perl -w use strict; use Data::Dumper; use Tie::Hash; package Hash::Add; @Hash::Add::ISA = qw /Tie::StdHash/; sub sumFields { my $self = shift; $self->{__summedFields} = [ @_ ]; } sub TIEHASH { my $classname = shift; my $self = $classname->SUPER::TIEHASH; $self->sumFields(@_); $self; } use overload '+' => sub { my ($self, $other) = @_; my @keys = @{$self->{__summedFields}}; @keys = keys(%$self) if (!@keys); foreach my $key (@keys) { next if $key eq '__summedFields'; $self -> {$key} += $other -> {$key}; } }; package main; my @fields = qw /foo bar/; my $totals = tie my %totals => 'Hash::Add', @fields; my $delta = tie my %delta => 'Tie::StdHash'; @totals{ 'a', 'z' } = ( 123, 456 ); @delta{ 'a', 'z' } = ( 789, 234 ); @totals {@fields} = (10, 20); @delta {@fields} = (5, 6); $totals += $delta; print "Foo = $totals{foo}\n"; print "Bar = $totals{bar}\n"; __END__ Foo = 15 Bar = 26
|
|---|