« 歩いて通う | メイン | はてなブックマークのBookmarklet Safariでの文字化けを直す »

headerを出力してからのdie

CGIの中でHTTPのheaderを出力してしまってからのDIEというのはなるべく避けているけど、やってしまったときに、CGI::Carpがどのように処理をしているのかがなかなか面白かったのでメモ。

    my $bytes_written = eval{tell STDOUT};
    if (defined $bytes_written && $bytes_written > 0) {
        print STDOUT $mess;
    }
    else {
        print STDOUT "Content-type: text/html?n?n";
        print STDOUT $mess;
    }


標準出力のファイルポジションをチェックするなんてことができるのね。

CGI::Carpはプログラムを作成するときは便利ですが、本運用時は使わないようにしましょう。
エラーが出た場合のメッセージがセキュリティ上問題になる可能性もあります。