my @work = fetch_jobs($starting_condition); while ( @work ) { # Remove 1 item from our stack/queue my $job = shift @work; # Possibly add new jobs to our stack/queue if ( more_jobs($job) ) { push @work, fetch_jobs($job); } # process job }