#! /usr/bin/perl use strict; use warnings; use Data::Dumper; sub Hash_Key_Cap { my $entry=shift; %$entry = map { uc $_ => $entry->{$_} } keys %$entry; foreach my $main ( sort keys %$entry){ if( ref $entry->{$main} eq "HASH" ) { %{ $entry->{ $main } } = map { uc $_ => $entry->{ $main }{ $_ } } keys %{ $entry->{ $main } }; } elsif(ref $entry->{$main} eq "ARRAY" ){ foreach my $test (@{$entry->{$main}}){ if (ref $test eq "HASH") { %{$test} = map { uc $_ => $test->{ $_ } } keys %{$test} }; } } } return $entry; } my %hash=( 'a'=>'Wow', 'b'=>['GOOD', 'BAD'], 'c'=>[ {one=>'perl', two=>'monks', five=>{a=>'b',c=>{ c=>'d' } }, three=>'Test', four=>'Best' }, 2], 'd'=> { five=>5,size=>6} ); print Dumper(Hash_Key_Cap(\%hash));