2015-04-20 409 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