【问题标题】:Search pattern not terminated in Perl搜索模式未在 Perl 中终止
【发布时间】:2013-03-06 18:06:24
【问题描述】:

我一直在尝试调试此搜索模式未终止错误,但似乎无法找到(我猜我的 for each 循环)它未终止的位置?我的代码底部的最后一行是第 160 行。任何人都可以给我任何关于我的代码有什么问题的提示吗?我正在尝试打印选择结果中的每个标题及其每一行中的每个数据,并将其打印在 CGI 页面上。

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;

【问题讨论】:

  • 我认为您打算将 \n 用于新行。 /n 没有特殊含义。另外,你用什么文本编辑器来编辑 perl 代码?它有syntax highlighting 功能吗?
  • 还有一点,你代码的最后三行似乎使用了here doc。请参阅链接以了解如何修复您的代码。
  • 好的,谢谢伙计们..是的,我正在使用 notepad++ 和 gedit。编辑器对 CGI 脚本编写完全没有帮助。对我来说没有突出显示它的全黑文本:(你有推荐的文本编辑器吗?
  • 这是个人选择,但是,您可以手动将语言设置为 perl 以在 notepad++ 中启用 perl 特定语法突出显示。也许,它本身并不理解 .cgi 扩展名。 Gedit 可能有一些类似的设置...

标签: perl


【解决方案1】:

我认为您正在尝试进行 heredoc 样式的引用,但它应该如下所示:

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

为您节省大量print 语句;)如果您需要变量插值,请将heredoc 结束标记放在双引号中(print &lt;&lt;"FOOTER";)。单引号可以防止插值(正如@daxim 所指出的那样)。有关heredoc的更多信息 请参阅perlop 或 JFGI。

【讨论】:

【解决方案2】:

您在底部的这些打印语句周围缺少双引号。它们应该如下所示:

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

如果您还没有,您应该使用带有语法高亮显示的编辑器。他们清楚地指出了这样的问题。

错误与搜索模式有关的原因是因为它看到了一个/ 字符,该字符开始定义正则表达式(或搜索模式)。

【讨论】:

    【解决方案3】:

    您只是错过了打印...不是吗? 你应该用这个来完成你的脚本:

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

    【讨论】:

      【解决方案4】:

      这是什么?

      </body>
      print</html>FOOTER;
      

      可能这就是你的错误所在..

      【讨论】:

        猜你喜欢
        • 2018-04-25
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多