在perl中获取错误在/var/www/sandeep/testeof.cgi第2行

时间:2016-05-23 06:25:34

标签: perl

iam使用perl打印一些数据,但是它给了我错误在EOF之前的任何地方找不到字符串终结符“EOF”

代码为:

#!/usr/local/bin/perl -w
print <<EOF;
hello
EOF

错误:

  

[Mon May 23 11:32:12 2016] [错误] [client 192.168.10.117] Options指令禁止的目录索引:/ var / www /,referer:http://192.168.10.100/   [Mon May 23 11:32:12 2016] [错误] [客户端192.168.10.117]来自脚本的格式错误的标题。错误的标题=你好:testeof.cgi   [Mon May 23 11:32:18 2016] [错误] [client 192.168.10.117] Options指令禁止的目录索引:/ var / www /,referer:http://192.168.10.100/   [Mon May 23 11:32:18 2016] [错误] [客户端192.168.10.117]在/var/www/sandeep/testeof.cgi第2行的EOF之前的任何地方都找不到字符串终结符“EOF”。   [Mon May 23 11:32:18 2016] [错误] [client 192.168.10.117]脚本标题过早结束:testeof.cgi

我尝试将EOF放在单引号中(print&lt;&lt;&lt;'EOF';),如this answer所示,但错误相同。通过此方法打印正在同一目录中的其他文件中工作 我还提到了this question (Why am I getting “Can't find string terminator ”'“ anywhere before EOF at -e line 1” when I try to run a Perl one-liner on Windows?),但在那个问题中OP使用不同的方法来打印和使用linux(UBUNTU)。

请指导我做错的地方?

1 个答案:

答案 0 :(得分:1)

您的代码是正确的。

确保您的EOF在一条线上,周围没有空格。

使用引号指定终结符:

print <<_EOF_;
hi $$
_EOF_

print <<"_EOF_";
hi $$
_EOF_

两者完全相同(打印hi 12345,其中12345是当前流程的流程ID),但第二个与单引号相比更清晰:

print <<'_EOF_';
hi $$
_EOF_

这个会打印hi $$,因为没有用单引号替换变量。

Web脚本总是需要一个标题(至少对于Apache)。添加此行作为第一个输出行以消除malformed header from script错误:

print "Content-type: text/html\r\n\r\n";