CGI::Carpを使用set_die_handler
して、エラー メッセージを適切に出力し たいと考えています。
Web ページでエラーが発生することは想定されていませんが、print header
既に呼び出された後のどこかでエラーが発生した場合は、ヘッダーがテキストとして出力され、ページが正しくフォーマットされない可能性が高くなります。
質問にあるように、CGI::header() が既に呼び出されているかどうかを確認したいと思います。これは、グローバル変数を使用して、関数が呼び出される可能性のあるすべての場所に設定することで実行できますが、これが内部で既に実行されていることを願っています。または、すでに STDOUT に送信されたものを解析する方法があるかもしれません。動作しないコードの例:
BEGIN {
set_die_handler(
sub {
print header if not CGI::header_called;
# or possibly,something like: if (<STDOUT> !~ /Content\-Type/)
...
});
}
注:
CGI.pm の年齢に関連するコメントは受け入れられますが、すぐに却下されます :) Perl には MVC フレームワークがあることがわかりました