The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Convert::Color;
use Getopt::Long;

my $steps = 10;
my $space = "hsv";
my $html;

GetOptions(
   'number|n=i' => \$steps,
   'space=s' => \$space,
   'html' => \$html,
) or exit 1;

my $as_space = "as_$space";

my @start = Convert::Color->new( shift @ARGV || die "No start colour\n" )->$as_space->$space;
my @end   = Convert::Color->new( shift @ARGV || die "No end colour\n" )->$as_space->$space;

print qq[<html><body><table>\n] if $html;

foreach ( 0 .. $steps ) {
   my $alpha = $_ / $steps;

   my $col = Convert::Color->new( "$space:" . join ",", map { (1-$alpha) * $start[$_] + $alpha * $end[$_] } 0 .. 2 );

   my $rgb = $col->as_rgb8;

   if( $html ) {
      my $hex = $rgb->hex;
      printf qq[<tr><td style="background-color: #%s">#%s</td></tr>\n], $hex, $hex;
   }
   else {
      printf "%s  h: %3s, s: %3s, v: %3s\n", $rgb->hex, $col->hue, $col->saturation, $col->value;
   }
}

print qq[</table></body></html>\n] if $html;