sub addtwo { my $params = shift; my $s = $params->{structure}; # if (ref($s) eq "LIST") { $c = 0; foreach $e (@{$s}) { push @$s, addtwo({ structures => $e }); #$s->[$c] = addtwo({ structure => $e }); $c++; } # } elsif (ref($s) eq "HASH") { if (scalar keys %{$s} == 0) { return undef; } else { foreach my $e (values %{$s}) { $s->{$e} = addtwo({ structure => $s->{$e} }); } } } else { $s = 1; } return $c; } print addtwo([ { a => 1, b => 2, c => 3 }, { d => 4, e => 5 }, [ 6, 7, 8 ], 9, 10, 11, [ 12, 13, 14 ] ]);