#!/usr/bin/perl -Twl use strict; my @SAFE = qw(0 51 102 153 204 255); my @RGB = ([RED => 0], [GREEN => 1], [BLUE => 2]); sub get_set {grep { $_ >= $_[0] && $_ < $_[1] } @SAFE} sub dec_hex {map {sprintf "%02x", $_} @_} sub permute { my $last = pop @_; return map [$_], @$last if(!@_); return map { my $left = $_; map [@$left, $_], @$last } permute(@_); } foreach my $R (@RGB) { print $/, $R->[0], 'ish:'; foreach my $t (get_set(51, 256)) { my @clrs = get_set(0, $t); foreach (permute(\@clrs, \@clrs)) { my @tuple = @$_; splice(@tuple, $R->[1], 0, $t); print '#', dec_hex(@tuple); } } } print $/, 'GRAYish:'; print '#', dec_hex(($_)x3) for @SAFE;