#!/usr/bin/perl -l # http://perlmonks.org/?node_id=1180347 use strict; use warnings; use Data::Dumper; $Data::Dumper::Terse = 1; $Data::Dumper::Indent = 0; sub addone { my $arg = shift; ref $arg eq 'ARRAY' ? [ map addone($_), @$arg ] : ref $arg eq 'HASH' ? { map addone($_), %$arg } : $arg =~ /^\d+\z/ ? $arg + 1 : $arg; } print Dumper addone( [ { a => 1, b => 2, c => 3 }, { d => 4, e => 5 }, [ 6, 7, 8 ], 9, 10, 11, [ 12, 13, 14 ] ] );