use strict; use warnings; my $count = 0; my $max_output = 7; sub rec { my $hash = shift; my $level = shift; return if $level > 1; while ( my ( $k, $v ) = each %$hash ) { exit 0 if ++$count > $max_output; # backstop print "$level: $k\n"; rec( $hash, $level + 1 ); } } rec( { foo => 1, bar => 2, baz => 3 }, 0 ); __END__ 0: bar 1: baz 1: foo 0: bar 1: baz 1: foo 0: bar