Perl:我在哪里犯了错误?

时间:2014-12-22 08:03:59

标签: regex perl

我使用cgi perl能够在浏览器上查看文件的内容。我有以下要求:

  • 所有以单词' Service'开头的行必须打印为标题(H4)
  • 所有其他行必须打印为段落(P)。

我已尝试过以下代码,但它无效。所有线都打印为标题(H4)。我犯了什么错误吗?

  use strict;
  use warnings;
  use diagnostics;
    printf "Content-type: text/html\n\n";
    print <<HTML;
       <HTML>
       <HEAD>
       <TITLE>DataPower_Status</TITLE>
      </HEAD>
        HTML

     open FILE, "dpstatus" or die "could not open filename";
      while(<FILE>) {
        if ($_^"Service")
   {
        printf "<TR><TD><H4>$_</H4></TD></TR>\n";
  }
   else {

        printf "<TR><TD><p>$_</p></TD></TR>\n";
       }
        }
   close FILE;

    print <<HTML;
   </body>
   </html>
    HTML

2 个答案:

答案 0 :(得分:3)

此:

        if ($_^"Service")

根本不使用正则表达式;它只是带有参数^$_的XOR运算符"Service"。所以它根本不是你想要的。

相反,请将其更改为:

        if ($_ =~ m/^Service/)

或更简洁地说:

        if (/^Service/)

答案 1 :(得分:1)

$_^"Service"

来自perldoc perlop

  

二进制“^”将其操作数一点一点地进行异或。

所以你可能想要正则表达式/^Service/而不是XOR操作。