use File::Find; use List::Util qw(shuffle); my @files; find({wanted => sub { push @files, $File::Find::name }, follow => 1}, $somedir); @files = shuffle @files; process_file($_) for @files;