sub foo { my $dir = shift; chdir $dir; local *CURRENT_DIR; # Everything else follows } #### opendir FOO, "$dir" or die "Couldn't open $dir: $!"; @contents = readdir FOO; closedir FOO; #### @contents = grep !/^\.\.?$/, readdir FOO; #### sub recurse_me { my $dir = shift; opendir FOO, "$dir" or die "Couldn't open $dir: $!; while( readdir FOO ) { if ( -d $_ ) { push @dirs, $_; } else { # do something interesting } } closedir FOO; recurse_me( $_ ) for ( sort @dirs ); }