2012-04-24 56 views
0

我一直在試圖調試這個搜索模式沒有終止的錯誤,但似乎無法找到在哪裏(我猜我的每個循環)它沒有終止?我的代碼底部的最後一行是160行。任何人都可以提供我的代碼錯誤的提示嗎?我試圖在選擇結果中打印出每個標題,並在每行中輸出每個數據並將其打印在CGI頁面上。在Perl中沒有終止的搜索模式

C:\ XAMPP \ cgi-bin目錄> perl的create_report.cgi 搜索在create_report.cgi線沒有終止圖案160

foreach $rpt_sel_output(@desc_origin) 
{ 
($rptid, $servid, $rptcat_id, $desc, $remail_add, $remail_info, $ent_usr, $ent_dte, $up_usr, $up_dte, $fav)=split(",",$rpt_sel_output); 
if($rptid eq 'ReportID') #header rows 
{ 
print"<tr>/n"; 
print"<th>$rptid</th>"; 
print"<th>$servid</th>"; 
print"<th>$rptcat_id</th>"; 
print"<th>$desc</th>"; 
print"<th>$remail_add</th>"; 
print"<th>$remail_info</th>"; 
print"<th>$ent_usr</th>"; 
print"<th>$ent_dte</th>"; 
print"<th>$up_usr</th>"; 
print"<th>$up_dte</th>"; 
print"<th>$fav</th>"; 
print"<tr/>/n"; 
print"</table>/n"; 
next; 
} 
print"<tr>/n";# data from select that was outputed 
print"<td>$rptid</td>"; 
print"<td align 'right'> $servid</td>/n"; 
print"<td align 'right'> $rptcat_id</td>/n"; 
print"<td align 'right'> $desc</td>/n"; 
print"<td align 'right'> $remail_add</td>/n"; 
print"<td align 'right'> $remail_info</td>/n"; 
print"<td align 'right'> $ent_usr</td>/n"; 
print"<td align 'right'> $ent_dte</td>/n"; 
print"<td align 'right'> $up_usr</td>/n"; 
print"<td align 'right'> $up_dte</td>/n"; 
print"<td align 'right'> $fav</td>/n"; 
print"<tr/>/n"; 
} 
} 
print"</table>/n"; 


print"<<FOOTER/n"; 
    </body> 
print</html>FOOTER; 
+0

我覺得你打算用'\ n'換行。 '/ n'沒有特別的意義。另外,你用什麼文本編輯器來編輯Perl代碼?它是否具有[語法突出顯示]功能(http://en.wikipedia.org/wiki/Syntax_highlighting)? – Gowtham 2012-04-24 13:54:18

+0

還有一點,代碼的最後三行似乎是使用[here doc](http://en.wikipedia.org/wiki/Here_document#Perl)。請參閱該鏈接以瞭解如何修復您的代碼。 – Gowtham 2012-04-24 13:57:18

+0

好的,謝謝guys..yes我正在使用記事本++和gedit。編輯器對CGI腳本完全沒有幫助。沒有任何內容突出顯示其全部爲黑色文本:(你有推薦的文本編輯器嗎? – SaintClaire33 2012-04-24 14:31:12

回答

0

你錯過了周圍的底部那些打印語句雙引號。它們應該看起來像這樣:

print"<<FOOTER/n"; 
print "</body>"; 
print "</html>FOOTER"; 

如果您還不是,那麼應該使用帶有語法突出顯示器的編輯器。他們明確指出這樣的問題。

錯誤是關於搜索模式的原因是因爲它看到一個/字符,它開始定義正則表達式(或搜索模式)。

0

您只需錯過打印......不是嗎? 你應該這樣完成腳本:

print"<FOOTER />\n"; 
print"</body>"; 
print "</html>"; 
0

這是什麼?

</body> 
print</html>FOOTER; 

也許這是你的錯誤的謊言..

7

我認爲你正在試圖做定界符式的報價,但它應該是這樣的:

print <<FOOTER; 
</body> 
</html> 
FOOTER 

爲您節省了很多print語句;)如果您需要變量插值,請將heredoc結束標記放在雙引號(print <<"FOOTER";)中。單引號令牌可防止插值(如@daxim指出的那樣)。有關heredoc 的更多信息,請參閱perlop或JFGI。

+1

未加引號的表單已經插入了,如果你想告訴單引號標識符防止插值,你的評論會更有意義。引用標識符](http://p3rl.org/Perl::Critic::Policy::ValuesAndExpressions::RequireQuotedHeredocTerminator)。) – daxim 2012-04-24 14:24:06

+0

@daxim:感謝您的提示。 – mpe 2012-04-24 14:25:46