68user's page 掲示板

Prev< No. 1875〜1876> Next  [最新発言に戻る] [過去ログ一覧]
No. 1875 # dio [E-mail] 2001/04/01 (日) 15:10:12
>CGIで環境変数を取得していると、「(compatible; MSIE 5.5; 〜〜」
>等で表示されるはずが、「好きな名前〜〜〜」でアクセスす人がまれにい
>るのです。これはどううことなのでしょうか?
クライアント(ブラウザ)がサーバに送るUser Agent 文字列を自由に設定できるソフトを使っているからではないでしょうか。
私の使っているフリーのタブブラウザ、「DonutR」でも、UserAgentを
自由に設定できます。

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 にセットする
前に必要な変数を全て設定しておきましょう。

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