XAMPP服务器上的Perl给出错误500

时间:2014-08-08 15:27:58

标签: apache perl xampp

我是perl的新手,我正在尝试建立一个运行perl的Web服务器......

我确实让它与另一个脚本一起工作,但是有了这个,我得到了这个错误:

  

服务器错误!

     

服务器遇到内部错误但无法完成   你的要求。

     

错误消息:标题前的脚本输出结束:index.pl

     

如果您认为这是服务器错误,请与网站管理员联系。

     

错误500

     

localhost Apache / 2.4.9(Win32)OpenSSL / 1.0.1g PHP / 5.5.11

这是我的剧本:

#!"C:\xampp\perl\bin\perl.exe"
use strict;
use warnings;

#Open file and define $pcontent as content of body.txt
open(FILE,"body.txt"); 
local $/;
my $pcontent = <FILE>;
close(FILE)

#Open file and define $ptitle as content of title.txt
open(FILE,"title.txt"); 
local $/;
my $ptitle = <FILE>;
close(FILE)

#open html code
print "Content-type: text/html\n\n"; 
print "<html>";

#set html page title
print "<head>";
print "<title>$ptitle</title>";
print "</head>";
print "<body>";

#set the <body> of the html page
if ($pcontent = ""){
 print "
 <H1>ERROR OCCURED!</h1>"
} else{
print $pcontent;
};

#close the html code
print "</body>";
print "</html>";

1 个答案:

答案 0 :(得分:2)

它不起作用的原因是因为您的Perl代码存在语法错误,导致无法编译。您可以通过运行

检查代码是否存在语法错误
perl -c yourscript.pl

如果我们这样做,我们会发现:

syntax error at yourscript.pl line 11, near ")

如果我们查看第11行,我们会看到之前的行在语句末尾缺少分号。

close(FILE)     # <--- need semicolon here.

但是这个脚本还有一些其他问题:

  • 您应该避免使用全局文件句柄(FILE),而应使用词法文件句柄。一个优点是,由于它们在其范围的最后被自动销毁(假设没有引用),它们将自动close给你。
  • 你应该使用open的三参数形式来帮助你捕捉某些错误
  • 您应该检查open是否成功并报告错误,如果它没有
  • 你应该local只在一个小区内$/ ize print,否则会影响你可能不想要它的程序中的其他东西
  • 如果这个脚本不仅仅是一个简单的例子,那么你应该使用模板系统而不是eq一堆HTML。
  • 你的条件错了;您需要使用==运算符进行字符串相等,或=进行数字相等。 use strict; use warnings; #Open file and define $pcontent as content of body.txt my $pcontent = do { open my $fh, '<', 'body.txt' or die "Can not open body.txt: $!"; local $/; <$fh>; }; #Open file and define $ptitle as content of title.txt my $ptitle = do { open my $fh, '<', 'title.txt' or die "Can not open title.txt: $!"; local $/; <$fh>; }; #open html code print "Content-type: text/html\n\n"; print "<html>"; #set html page title print "<head>"; print "<title>$ptitle</title>"; print "</head>"; print "<body>"; #set the <body> of the html page if ($pcontent eq ""){ print "<H1>ERROR OCCURED!</h1>" } else{ print $pcontent; }; #close the html code print "</body>"; print "</html>"; 运算符用于分配。

把所有这些放在一起,这就是我写它的方式:

{{1}}