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

标签 perl cgi cgi.pm

使用 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/

相关文章:

javascript - 动态/迭代构建页面内容

python - 使用 Python 进行字符翻译(如 tr 命令)

python - MySQL-python 不在 CGI 中执行

perl - 分发中 Perl CGI 脚本的自动测试

javascript - 在 cgi.pm 中包含内部 javascript

perl CGI.pm : lists vs strings to build pages

perl - 我如何使用正则表达式断言标量只有数字而没有字母字符?

regex - 将字符串拆分为标记并在 Perl 中存储分隔符

python:与cgi脚本中的 session 交互