パッケージ内でシグナルをハンドリングしたい

[上に] [前に] [次に]
ガバポン 2000/06/10(土) 15:31:23
alarmをハンドリングして、無限ループから抜け出す
CGIを作成したいのです。
そこでコマンドラインで実験したのですが、

------------------------------------------------ alarm.cgi
$SIG{'ALRM'} = "TimeOut";
alarm(5);
while(1) { print "aaa\n"; }
exit;
sub TimeOut {
    print "alarm\n";
    exit;
}
------------------------------------------------

↑は、うまくいきました。

でも、↓のような構成にすると失敗します。
無限ループが無限に続きます。なぜでしょうか?
プラットフォームはSolaris2.6です。

------------------------------------------------alarm.pl
package alarm;
$SIG{'ALRM'} = "TimeOut";
alarm(5);
sub TimeOut {
    print "alarm\n";
    exit;
}
1;
------------------------------------------------alarm.cgi
require 'alarm.pl';
while(1) { print "aaa\n"; }
exit;
------------------------------------------------

?_? 2000/06/10(土) 15:55:55
パッケージ"alarm"内のサブルーチンを呼ぶ出すんだから、
$SIG{'ALRM'} = "alarm::TimeOut";
とすればいいだろ。

B-Cus 2000/06/10(土) 19:18:26
ふつー、$SIG{'ALRM'} = \&TimeOut; では。
ラクダ本にも書いてあるし。

秘密 2000/06/10(土) 20:31:12
割り込み質問ですが、

alarm::TimeOut と alarm'TimeOut の違いは何?

パーラー初心者 2000/06/11(日) 05:32:06
>alarm::TimeOut と alarm'TimeOut の違いは何?

同じじゃないんですか?

[上に] [前に] [次に]