#!/usr/bin/perl use strict; use warnings 'all'; my $structure = [ { a => 1, b => 2, c => 3 }, { d => 4, e => 5 }, [ 6, 7, 8 ], 9, 10, 11, [ 12, 13, 14 ] ]; sub addtwo { my $params = shift; my $s = $params->{$structure}; if (ref($s) eq "ARRAY") { my $c = 0; foreach my $e (@{$s}) { $s->[$c] = addtwo({ structur => $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 my $c; }