#!/usr/local/bin/perl use strict; use warnings; my %hash = ( 'a' => { 'x' => 40, 'z' => 102 }, 'b' => { 'z' => 100, 'x' => 10, 'y' => 20 }, 'c' => { 'x' => 50 }, 'd' => { 'z' => 101, 'y' => 30 } ); my $x_but_not_y = 0; my $z = 0; foreach my $key (keys %hash) { $x_but_not_y++ if defined $hash{$key}->{x} and not defined $hash{$key}->{y}; $z++ if defined $hash{$key}->{z}; } print "number of keys where x defined, but not y: $x_but_not_y\n"; print "number of keys where z defined: $z\n";