if you want to avoid installing Term::ANSIColor:

sub ansi {
	my ($c) = @_;
	if (!$c) { return "\e[m"; }
	my %colors = qw(
		reset       0
		bold        1
		underline   4
		inverse     7
		black      30
		red        31
		green      32
		yellow     33
		blue       34
		violet     35
		magenta    35
		cyan       36
		white      37
		on_black   40
		on_red     41
		on_green   42
		on_yellow  43
		on_blue    44
		on_violet  45
		on_magenta 45
		on_cyan    46
		on_white   47
	);
	my $r = join(';',map {$colors{$_}} split(/\W+/,$c));
	return length($r) ? "\e[${r}m" : '';
}