my (%seen, @bad_link); for my $url (@base_pages) { my @work = get_links($url); while (@work) { my $link = pop @work; next if $seen{$link}++; if (is_good($link)) { push @work, get_links($link); } else { push @bad_link, $link; } } }