Term::ANSIColor - Color screen output using ANSI escape sequences
use Term::ANSIColor; print color 'bold blue'; print "This text is bold blue.\n"; print color 'reset'; print "This text is normal.\n"; print colored ("Yellow on magenta.\n", 'yellow on_magenta'); print "This text is normal.\n";
use Term::ANSIColor qw(:constants); print BOLD, BLUE, "This text is in bold blue.\n", RESET;
use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; print BOLD BLUE "This text is in bold blue.\n"; print "This text is normal.\n";
This module has two interfaces, one through
color() takes any number of strings as arguments and considers them to be space-separated lists of attributes. It then forms and returns the escape sequence to set those attributes. It doesn't print it out, just returns it, so you'll have to print it yourself if you want to (this is so that you can save it as a string, pass it to something else, send it to a file handle, or do anything else with it that you might care to).
The recognized attributes (all of which should be fairly intuitive) are clear, reset, bold, underline, underscore, blink, reverse, concealed, black, red, green, yellow, blue, magenta, on_black, on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, and on_white. Case is not significant. Underline and underscore are equivalent, as are clear and reset, so use whichever is the most intuitive to you. The color alone sets the foreground color, and on_color sets the background color.
Note that attributes, once set, last until they are unset (by sending the attribute ``reset''). Be careful to do this, or otherwise your attribute will last after your script is done running, and people get very annoyed at having their prompt and typing changed to weird colors.
As an aid to help with this,
Alternately, if you import
print BOLD BLUE ON_WHITE "Text\n", RESET;
print colored ("Text\n", 'bold blue on_white');
When using the constants, if you don't want to have to remember to add the
print BOLD BLUE "Text\n";
will reset the display mode afterwards, whereas:
print BOLD, BLUE, "Text\n";
The subroutine interface has the advantage over the constants interface in
that only 2 soubrutines are exported into your namespace, verses 22 in the
constants interface. On the flip side, the constants interface has the
advantage of better compile time error checking, since misspelled names of
colors or attributes in calls to
It would be nice if one could leave off the commas around the constants entirely and just say:
print BOLD BLUE ON_WHITE "Text\n" RESET;
but the syntax of Perl doesn't allow this. You need a comma after the string. (Of course, you may consider it a bug that commas between all the constants aren't required, in which case you may feel free to insert commas unless you're using $Term::ANSIColor::AUTORESET.)
For easier debuging, you may prefer to always use the commas when not setting $Term::ANSIColor::AUTORESET so that you'll get a fatal compile error rather than a warning.