ディスパッチテーブル

別に subroutine reference を使うこともないような。

my %colors = (
    black => '000000',
    red   => 'FF0000',
    green => '00FF00',
    blue  => '0000FF',
    white => 'FFFFFF',
);

sub coloring {
    my ($color, $data) = @_;
    if (exists $colors{$color}) {
        return qq{<font color="#$colors{$color}">$data</font>};
    }
    return;
}

場合によっては、subroutine reference の方がいいとは思うけど、この例の場合は単純に色の名前と対応するデータだけをテーブルに入れたほうが分かりやすいんじゃないかなぁ。