my @ids = qw(a b c d e f g h); my $chosen_id = ''; # Flat file! # each line is a time and an id separated by a space open my $recent_fh, '<', 'recent' or die "Can't read recent: $!"; my @recent_lines = <$recent_fh>; close $recent_fh or die "Can't close recent: $!"; chomp @recent_lines; my %recent_ids = map { split } @recent_lines; # remove the recent ids from the id list my @possible_ids = grep { ! $recent_ids{$_} } @ids; $chosen_id = $possible_ids[rand @possible_ids]; # process it # remove the oldest, as before open $recent_fh, '>', 'recent' or die "Can't write recent: $!"; print $recent_fh map { "$_ " . $recent_ids{$_} . "\n" } keys %recent_ids; close $recent_fh or die "Can't close recent: $!";