2015-04-20 413 views
0

我想在perl CGI文件中运行javascript。代码如下在Perl中使用javascript CGI

#!C:\wamp\bin\perl\bin\perl.exe 

$html = "Content-Type: text/html 

<HTML> 
<HEAD> 
<TITLE>Hello World</TITLE> 
<SCRIPT TYPE="TEXT/JAVASCRIPT"> 
alert("i am here"); 
</SCRIPT> 
</HEAD> 
<BODY> 
<H4>Hello World</H4> 
<P> 
Your IP Address is $ENV{REMOTE_ADDR} 
<P> 
<H5>Have a nice day</H5> 
</BODY> 
</HTML>"; 

print $html; 

我得到一个内部服务器错误。

只用HTML代码工作正常 请让我知道什么必须做,包括在Perl

回答

5

的javascript,不能使用你的双引号字符串内的双引号不进行转义它们。内部服务器错误是由Perl试图告诉你造成的:

$html = "..."TEXT/JAVASCRIPT"..."i am here"..."; 

是无效的Perl代码。如果你检查服务器的错误日志,你会看到类似“Bareword发现操作员期望的......”。

的简单的解决方法是使用here document

#!C:\wamp\bin\perl\bin\perl.exe 

use strict; 
use warnings; 

my $html = <<"END HTML"; 
Content-Type: text/html 

<HTML> 
<HEAD> 
<TITLE>Hello World</TITLE> 
<SCRIPT TYPE="TEXT/JAVASCRIPT"> 
alert("i am here"); 
</SCRIPT> 
</HEAD> 
<BODY> 
<H4>Hello World</H4> 
<P> 
Your IP Address is $ENV{REMOTE_ADDR} 
<P> 
<H5>Have a nice day</H5> 
</BODY> 
</HTML> 
END HTML 

print $html; 
1

使用qq() outputing HTML或JavaScript时。

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

my $html = qq(Content-Type: text/html 

<HTML> 
<HEAD> 
<TITLE>Hello World</TITLE> 
<SCRIPT TYPE="TEXT/JAVASCRIPT"> 
alert("i am here"); 
</SCRIPT> 
</HEAD> 
<BODY> 
<H4>Hello World</H4> 
<P> 
Your IP Address is $ENV{REMOTE_ADDR} 
<P> 
<H5>Have a nice day</H5> 
</BODY> 
</HTML>); 

print $html; 

可以使用{},而不是()作为分隔符。请参阅document

a {}表示您选择的任何一对分隔符。

0

正如已经指出的那样,问题在于错误的引用。

作为一个小技巧(除了固定的报价如上所述)

添加

use warnings; 
use strict; 

到脚本的顶部,让您可以随时通过执行perl -c

检查语法在你的情况下:

C:\wamp\bin\perl\bin\perl.exe -c <filename> 

这将有笑你马上就会犯错误。

HTH Georg