Makes fountain fills for your web needs. You can modify this for any needs - like colorizing texts for example. Enjoy.
#!/usr/bin/perl
# Perl Color Blend Demo
# by Anatoli Radulov
use warnings;
use strict;
print "Content-type: text/html\n\n<html><body>";
#blend demo 1
print "<table cellspacing=0 border=1><tr>";
&blender ("#000000","#FFFFFF",12);
&blender ("#ff0000","#FFFFFF",12);
&blender ("#00ff00","#FFFFFF",12);
&blender ("#0000ff","#FFFFFF",12);
print "</tr></table>\n";
#blend demo 2
print "<table cellspacing=0><tr>";
&blender ("#FF0000","#FFFF00",20);
&blender ("#FFFF00","#00FFFF",20);
&blender ("#00FFFF","#FF00FF",20);
&blender ("#FF00FF","#FF0000",20);
print "</tr></table>";
print "</body></html>";
######################################################################
+#############################
sub blender {
my (@range, @color1, @color2);
#hex2dec;
@color1 = ( @_[0] =~ /#([0-9A-Fa-f][0-9A-Fa-f])([0-9A-Fa-f][0-9A-Fa-f]
+)([0-9A-Fa-f][0-9A-Fa-f])/ );
@color2 = ( @_[1] =~ /#([0-9A-Fa-f][0-9A-Fa-f])([0-9A-Fa-f][0-9A-Fa-f]
+)([0-9A-Fa-f][0-9A-Fa-f])/ );
$_ = hex($_) foreach @color1;
$_ = hex($_) foreach @color2;
#calculate blend ranges
$range[$_] = ($color2[$_] - $color1[$_])/@_[2] for (0..2);
#blend @_[2] steps
for (0..@_[2]) {
print "<td width=15 bgcolor=",
sprintf ("#%02x%02x%02x",
int ($color1[0]+$range[0]*$_),
int ($color1[1]+$range[1]*$_),
int ($color1[2]+$range[2]*$_) ),
"> </td>\n";
}
}