Term::ANSIColor で色付けしよう。(Perl)

perlのコアモジュールTerm::ANSIColorを使ってコンソール出力に色付けができる。

今まで、tputというコマンドがあるんで、そっちを使って色付け(※1)していたが、
環境によってインストールされていないこともあるので、
代わりにPerlのコアモジュールに含まれるTerm::ANSIColorを使う方が良い気がします。
Ubuntu, CentOS, MacOS, Cygwinなどでは、perlは入ってるんで。

Term::ANSIColorのリファレンス
https://perldoc.perl.org/5.8.8/Term/ANSIColor.html

直接ANSIエスケープシーケンス書いて出力すればいいんじゃない?
って思うんですが、ターミナルの環境によって正しく出力できない場合(※2)があるので、
tputもしくは、Term::ANSIColorで正しく動作させる事ができるのと、
Term::ANSIColor 使った方が可読性がよいと思います。

Term::ANSIColorのサンプル

function color_blue() {
    perl -MTerm::ANSIColor=:constants -e "print BLUE \"$1\", RESET . \"\n\""
}

color_blue "This message color is blue."

こんな感じでShellScript内に関数定義しておくと便利。


※1 tputコマンドを使った実装例

function color_green() {
    if which tput > /dev/null 2>&1; then
        echo "$(tput setaf 2)$1$(tput sgr 0)"
        return
    fi
    echo "$1"
}

color_green "This message color is green."

こちらは、tputコマンドがない場合も想定して、whichでコマンドあるかどうかのチェックもしてました。


※2 実際、IntelliJ IDEAのターミナル上で正しく出力されない事があった。

コメントを残す