Perlのシグナルハンドラ

シグナル受信時実行するサブルーチンの設定

$SIG{シグナル名} = サブルーチン名;

シグナル受信時の動作をデフォルトに戻す

$SIG{シグナル名} = 'DEFAULT';

シグナルの受信を無視

$SIG{シグナル名} = 'IGNORE';

シグナルの一部
SIGINT: interrupt, Ctrl+Cによる中断
SIGTERM: termination, killコマンドのデフォルトシグナル
SIGALRM: alarm, alarmで設定した時間が経過

10秒経つ前にCtrl+C押した場合、即座に終了せずループを抜けて終わる例

use 5.018;
use strict;
use warnings;
use utf8;

my $stop = 0;

$SIG{INT} = sub {
    $stop = 1;
};

print "start";
for (1..10) {
    sleep(1);
    print "sleep:$_";
    if ($stop) {
        last;
    }
}
print "end";