in reply to Hard to find bug in my File::Find code

I might go with something more like this (not tested on Windows):
#!/usr/bin/perl use strict; use warnings; use File::Basename qw(basename); # Initial directory list my @dirs = "tmp"; my @final_list; while (my $dir = shift @dirs) { push @final_list, $dir; for my $nxt_dir ( grep -d, <$dir/*> ) { if ( basename($nxt_dir) =~ /^(?:shared|home|expansions)$/i ) { unshift @dirs, $nxt_dir; } else { push @final_list, $nxt_dir; } } } print "$_\n" for @final_list;