use strict; use Term::ANSIColor qw/:constants/; use Carp; print colorparse("%CThis is bright/bold cyan%n and this is normal text.\n"); print colorparse("%RC%Yo%Bl%Mo%Cr%n rocks!\n"); sub colorparse { my $txt = shift; my $is_prompt = shift || 0; if (not defined $txt) { croak("error: missing parameter\nusage: colorparse(\$txt,\$is_prompt)"); } my %transtbl = ( k => RESET . BLACK , K => RESET . BLACK . BOLD , r => RESET . RED , R => RESET . RED . BOLD , g => RESET . GREEN , G => RESET . GREEN . BOLD , y => RESET . YELLOW , Y => RESET . YELLOW . BOLD , b => RESET . BLUE , B => RESET . BLUE . BOLD , m => RESET . MAGENTA , M => RESET . MAGENTA . BOLD , c => RESET . CYAN , C => RESET . CYAN . BOLD , w => RESET . WHITE , W => RESET . WHITE . BOLD , n => RESET ); if ($is_prompt) { $txt =~ s/%([kKrRgGyYbBmMcCwWn])/\001\001$transtbl{$1}\001\002/g; } else { $txt =~ s/%([kKrRgGyYbBmMcCwWn])/$transtbl{$1}/g; } $txt =~ s/%%/%/g; return($txt); }