use strict; use warnings; my @ips = qw( 127.0.0.1 192.172.24.23 172.25.1.86 66.35.250.150 209.197.123.153 66.39.54.27 204.74.99.100 ); for my $ip (@ips) { my @ip = split /\./, $ip; my $seed = 0; $seed ^= $_ for @ip; srand($seed); my ($r,$g,$b,$mask) = map { splice @ip, int(rand(scalar @ip)), 1 } (1 .. @ip); ($r,$g,$b) = map { int(rand(2)) ? $_ ^ $mask : $_ & $mask } ($r,$g,$b); printf("%-15s => %3d %3d %3d\n",$ip,$r,$g,$b); }