#! perl -slw use strict; use Data::Dump qw[ pp ]; sub genNested { my $n = shift; map{ rand() < 0.5 ? [ rand(1000), genNested( $n-1 ) ] : rand( 1000 ) } 1 .. $n; } sub genIterator { my $tree = shift; my @stack = [ $tree, 0 ]; return sub { ## Fill in the blank (please :). } } my @nested = genNested( 3 ); pp \@nested; my $iter = genIterator( \@nested ); while( my $next = $iter->() ) { last if $next == $something; ## do stuff with $next. }