#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my $str = 'a[bdy]dfjaPÑsdafÜ'; my $str_2 = 'WAP'; my $hoh_ref = { hash_1 => { a => 'a[bdy]dfjaPÑsdafÜ', b => 'WAP' }, hash_2 => { c => 'Te st' } }; print "Original Hash:\n"; print Dumper $hoh_ref; foreach my $main_key (sort keys %{$hoh_ref}) { foreach my $sub_key (keys %{$hoh_ref->{$main_key}}) { if ($hoh_ref->{$main_key}{$sub_key} =~ /[^[:print:]]/) { while ($hoh_ref->{$main_key}{$sub_key} =~ /([^[:print:]])/g) { print "Non Printable Character:\t$1\n"; } } elsif ($hoh_ref->{$main_key}{$sub_key} !~ /\s/) { delete $hoh_ref->{$main_key}{$sub_key}; } } } print "\nResult Hash:\n"; print Dumper $hoh_ref; __END__ Original Hash: $VAR1 = { 'hash_1' => { 'a' => 'a[bdy]dfjaPÑsdafÜ', 'b' => 'WAP' }, 'hash_2' => { 'c' => 'Te st' } }; Non Printable Character: à Non Printable Character: ‘ Non Printable Character: à Non Printable Character: œ Result Hash: $VAR1 = { 'hash_1' => { 'a' => 'a[bdy]dfjaPÑsdafÜ' }, 'hash_2' => { 'c' => 'Te st' } };