Perl:如何检查CGI :: header是否已被调用?

vol*_*ron 2 perl cgi cgi.pm

使用CGI :: Carp,我想用它set_die_handler来优雅地输出错误信息.

网页预计不会遇到错误,但如果确实发生并且它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/)
           ...
       });
}
Run Code Online (Sandbox Code Playgroud)

注意:
与CGI.pm的年龄相关的注释被接受,但也很快被驳回:)它意识到Perl具有MVC框架

ike*_*ami 10

它没有记录,但CGI确实记录了是否header已经被调用.

>perl -e"use CGI qw( :cgi ); print header; print header;"
Content-Type: text/html; charset=ISO-8859-1

Content-Type: text/html; charset=ISO-8859-1


>perl -e"use CGI qw( :cgi -unique_headers ); print header; print header;"
Content-Type: text/html; charset=ISO-8859-1


>
Run Code Online (Sandbox Code Playgroud)