thanks a lot it will sure help. just one thing, can you explain what you did in case $is_prompt is true, and the last line before the return statement?
Sure hotshot (if I remember what I did, that is :) ).
When I made this subroutine and used the output for a colorful prompt (with Term::ReadLine), the color codes (the real ones, from Term::ANSIColor) confused the readline-prompt. In short, it counted the "invisible" color codes as characters and inserted the newline (which should come at the end of the terminal window) too early. To avoid this I inserted some extra control characters around the color codes to avoid it being counted by ReadLine.
The last line before the return statement is for converting %% to %. That means: Use %% in colorparse() to output a literal %.