my @names = qw/andy betty craig daniel edith/; my %reverse_lookup; @reverse_lookup{ @names } = (0..4); foreach $year (2004 .. 2007) { foreach (sort keys %people) { printf("%04d: %s buys for %s\n", $year, $_, $names[ ($year+$reverse_lookup{$_}) % 4 + 1] ); } }