http://www.perlmonks.org?node_id=1060221


in reply to Embargo algorithm

This is how I'd do it (albeit without using OO Perl):

use List::Util 'shuffle'; my @bag = shuffle qw( A B C D E ); my @embargoed = pop @bag; while ( 1 ) { my $time = ( localtime )[ 0 ]; # seconds sleep 1; if ( $time >= 55 ) { push @embargoed, pop @bag; push @bag, shift @embargoed if @embargoed > 2; @bag = shuffle @bag; sleep 5; } print "$time @embargoed\n"; }

NB: For testing porpoises, I've substituted seconds for minutes and minutes for hours. Adjusting this (including sleep times) is left as an excercise...

Update: Simplified code (and explanation). Minutes don't matter!