使用 CGI::Carp , 我想用 set_die_handler
优雅地输出错误信息。
网页预计不会遇到错误,但如果遇到错误并且发生在调用 print header
之后的某处,它会将标题输出为文本并且页面很可能是格式不正确。
如问题所述,我想检查 CGI::header() 是否已被调用。这可以通过使用 global 变量并将其设置在我可能调用函数的每个地方来完成,但我希望这可能已经在内部执行;或者可能有一种方法可以解析已经发送到 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 框架
最佳答案
它没有记录在案,但 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
>
关于Perl:如何检查 CGI::header 是否已经被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282484/