#!/usr/bin/perl -w use strict; use List::Util qw[ shuffle ]; my @tracks = 1..100; my $range = 5; # No overlap for this number of songs { my @last; for (@tracks){ unshift @last, $_; @last = @last[0..4] if @last > 5; # Play it! print "$_\n"; } my %h; do { # print "Shuffling...\n"; @tracks = shuffle @tracks; @h{@last,@tracks[0..4]} = (1) x $range * 2; } while keys %h < $range * 2; # For demo purposes... sleep 5; redo; }