my $iterator = $fc->scan_blah_files; while ($iterator->next_file) { my $file = $iterator->selected_file; print $file . "\n"; } } #### sub AUTOLOAD { our $AUTOLOAD; my $s = shift; $AUTOLOAD =~ /.*::get(_next)*(_\w+)*_files*$/ or croak "No such method: $AUTOLOAD"; my ($next, $type) = ($1, $2); if ($next) { # create an iterator my $class = ref($s) . '::Iterator'; if (!$type) { return $class->new($s->get_files); # iterator for all files } else { return $class->new(@{$s->{$type.'_files'}}); # iterator for file subset } } else { return @{$s->{$type.'_files'}}; # return file subset } }