68user's page 掲示板

Prev< No. 1876〜1877> Next  [最新発言に戻る] [過去ログ一覧]
No. 1876 # 68user 2001/04/01 (日) 16:24:11
>>1873 dio
> $SIG{PIPE} = \&lock_off;
\& は関数へのリファレンスです。ちなみに
    $SIG{PIPE} = sub { unlink($lock_file); exit; }
と等価です。

> $SIG{'PIPE'} = 'lock_off';
これだと、シグナルハンドラ lock_off の関数定義が同一ファイル
内にないといけません。別ファイルに sub lock_off を書いて、
それを require している場合は動かないということです。

関数へのリファレンスを使えば、どこで関数が定義されて
いようと動きます。

これらの事柄はラクダ本に書いてありますので、もちお持ちで
ないなら、購入されることをお薦めします。

> ハンドラの中で変数の値を参照する場合、その変数の初期化前に
> そのハンドラを書いて問題ないでしょうか?
これは、ハンドラ特有の問題ではなく、関数一般の話になります。
    #!/usr/bin/perl
    &lock_off;
    sub lock_off { print $lockkey }
    $lockkey = 1;
    exit;
と
    #!/usr/bin/perl
    $lockkey = 1;
    &lock_off;
    sub lock_off { print $lockkey }
    exit;
では、前者はよろしくないことはわかりますね。

シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ
シグナルハンドラが呼ばれるかわからないので、%SIG にセットする
前に必要な変数を全て設定しておきましょう。

No. 1877 # dio [E-mail] 2001/04/01 (日) 17:12:52
>\& は関数へのリファレンスです。ちなみに
>・・・・・・
>関数へのリファレンスを使えば、どこで関数が定義されて
>いようと動きます。
なるほど
そういう違いなのですか。

>シグナルハンドラの場合も、%SIG にセットしてしまうとその後いつ
>シグナルハンドラが呼ばれるかわからないので、%SIG にセットする
>前に必要な変数を全て設定しておきましょう。
わかりました。
どうもありがとうございます。

Prev< No. 1876〜1877> Next  [最新発言に戻る] [過去ログ一覧]