一定時間ログを吐かないとイスが飛ぶ Log::Minimal::FlyingChair というモジュールを作りました

package Log::Minimal::FlyingChair;

use strict;
use warnings;
use utf8;
use open IO => ':encoding(utf-8)', ':std';
use Log::Minimal;
use Time::HiRes qw(sleep);

our $VERSION = '0.01_01';

our $Interval = 5;
our $Chair = "ε=コ_";

my $pid;

my $print_orig = $Log::Minimal::PRINT;
$Log::Minimal::PRINT = sub {
    $print_orig->(@_);

    kill "TERM", $pid if $pid;

    $pid = fork || do {
        $|++;
        while (1) {
            sleep $Interval;
            for (my $i=0; $i<70; $i++) {
                print "\r"." "x$i.$Chair;
                sleep 0.02;
            }
            print "\n";
        }
    };
};

END {
    kill "TERM", $pid if $pid;
}

1;

こんな感じで使います。

#!/usr/bin/env perl

use strict;
use warnings;

use Log::Minimal;
use Log::Minimal::FlyingChair;
$Log::Minimal::FlyingChair::Interval = 2;
#$Log::Minimal::FlyingChair::Chair = '(; Д ) ゜ ゜';

infof("hajimari〜〜〜〜");
sleep 12; # モタモタ
infof("owari〜〜〜〜");

exit;

Log::Minimalは0.08からカラーリングもできるようになったし本当によいモジュールですね^^