$SIG で対応。
ループをCtrl-Cで抜ける場合、SIGINTが送られますので、$SIG{INT} に無名サブルーチンをセットすればOK。
プログラムは、こんなかんじになります。
#!/usr/bin/perl @nonosirare = ( "くず", "ばーか", "すけべ", "ばか", "しんじらんない", "あ゛ん?", "おたんこなす", "だいっきらい", "いいかげんにしたら", "モジモジしてキモイねー", "はげろ", "なにえらそうなこといってんの", "でてって", "くず", "むしんけー", "は?", ); local $SIG{INT} = sub { $l = 0; }; # localはなくても大丈夫? $c = 0 ; $l = 1 ; while($l) { $j = $nonosirare[ int(rand($#nonosirare + 1)) ] ; print $j ; $c ++ ; } print "\n\n" ; printf( "%d回罵られました。ありがとうございます。\n" , $c);
実行し、Ctrl-CしてSIGINTを送ったり、kill -INT (pid) してSIGINTを送ったりすると、ループから抜けてループを回した回数が表示されます。