当出现警告IIS时,Perl会抛出错误的标题

时间:2013-05-23 20:54:54

标签: perl iis activeperl

好的,这很奇怪。

我们所有的服务器都使用ActivePerl 5.8.8和Windows Server 2003。

在某些开发过程中,我们遇到了一个问题,我们正在处理的脚本开始抛出CGI错误。没有多少打印头可以工作,只是不断的CGI错误。该问题被降级为一个开发服务器。

经过一番挖掘,我发现问题与警告有关。当perl抛出某些警告时,页面从IIS返回时带有错误的CGI标题,并且没有任何内容。特别是关于连接未初始化字符串的警告。

这是我正在使用的测试脚本。

use strict;


Main();

sub Main {
  my $Web = new CGI;
    my $SQL = VIN::SQL->new('INDIGO');
  print $Web->header();
  print "Testing!";
  print "/r/n/r/n/";
  my ($Body, $Title) = ('', '');
    my $Page;
    eval{
        $Page = "";
        $Page  = $Web->param('Page');
        print "Page " . $Page;

    };
}

添加无警告语句意味着它会运行。添加Page param也意味着它运行。

有什么可能导致它的想法吗?我想了解为什么在添加“无警告”声明并继续前进之前,好像这种情况发生在我们的现场环境中,我宁愿不添加任何警告;语句到系统中的每个perl脚本。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

$Page不应该是undef,因此|| ""会确保分配空字符串。

sub Main {
  my $Web = new CGI;
  my $SQL = VIN::SQL->new('INDIGO');
  print $Web->header();
  print "Testing!";
  print "/r/n/r/n/";
  my ($Body, $Title) = ('', '');

  my $Page = $Web->param('Page') || "";
  print "Page ". $Page;
}

答案 1 :(得分:1)

在调用print $Web->header();之前,某些内容正在收到一条指向服务器的错误消息。这意味着服务器的输出类似于:

Error on line 123: Cannot create foo
Content-Type: text/html; charset=ISO-8859-1

Testing

这是一个糟糕的标题。

轻松修复将标题打印到代码的早期部分。

交换线条:

  my $SQL = VIN::SQL->new('INDIGO');
  print $Web->header();

  print $Web->header();
  my $SQL = VIN::SQL->new('INDIGO');

可能会解决问题(错误的标题),而是将生成的错误消息打印到浏览器。