for my $c1 (keys %hash) { for my $c2_c3 (keys %{$hash{$c1}}) { my ($c2, $c3) = split('_', $c2_c3); if ( () # $c2 is ok && () # $c3 is ok ) { # do stuff for good data } else { # do stuff for bad data } } }