use strict ; use warnings ; use Data::Dumper ; my $h1 = { a => 1, b => 2 } ; my $h2 = { a => 1, c => 3 } ; foreach( keys %{ $h2 } ) { merge( $h1 )->( $_ ) += $h2->{ $_ } ; } print Dumper( $h1 ) ; sub merge : lvalue { my $inh = $_[0] ; my $ret = sub : lvalue { $inh->{ $_[0] } ; } ; $ret ; }