!/usr/bin/perl -wd use IO::Dir; tie %dir, IO::Dir, "."; @files = grep { -f } keys %dir; fisher_yates_shuffle( \@files ); print $files[$_],"\n" for 0 .. 5; # right from the faq sub fisher_yates_shuffle { my $deck = shift; # $deck is a reference to an array my $i = @$deck; while ($i--) { my $j = int rand ($i+1); @$deck[$i,$j] = @$deck[$j,$i]; } } #### !/usr/bin/perl -wd use IO::Dir; use List::Util 'shuffle'; tie %dir, IO::Dir, "."; @files = grep { -f } keys %dir; @shuff = shuffle(@files); print $shuff[$_],"\n" for 0 .. 5;