我是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>";
答案 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}}