my @files; sub scan_folder{ my $folder = shift; $folder =~ s/\\/\//g; #quote spaces $folder =~ s/ /\\ /g; #quote spaces unless($folder =~ /\/$/){ $folder .= '/'; } foreach ( glob( $folder.'*' ) ){ push @files, $_; if(-d){ scan_folder( $_ ) unless /^\.{1,2}$/; #Skip . and .. folders ! next; } } } my $folder = shift || '.'; scan_folder( $folder ); print join "\n", sort { length($a) cmp length($b) } @files;