1
open DMLOG, "<dmlog.txt" or &error("Can't open log file: $!");
chomp(@entirelog=<DMLOG>);
 close DMLOG;
 for $line (@entirelog) 
{

if ($line =~ m/\#F/)
    {
    $titlecolumn = $line;
    last;
     }
 }

我发现 =~ 是我认为的正则表达式,但我不太明白它在这里做什么。

4

4 回答 4

6

它将第一行分配给$titlecolumn包含一个#后跟一个的F

绑定运算符=~并将正则表达式应用于字符串。该正则表达式通常写为. 前缀可以用来强调后面的文字是前缀(在使用其他分隔符时很重要)。/#F/m

于 2013-06-24T19:46:35.277 回答
3

它被称为绑定运算符。它用于将 RHS 上的模式与 LHS 上的变量匹配。同样,您得到了!~否定匹配的结果。

对于您的特定情况:

$line =~ m/\#F/

这个测试是否$line匹配模式 - /#F/

于 2013-06-24T19:46:52.930 回答
3

你了解什么是正则表达式吗?或者,是=~把你扔了?

在大多数编程语言中,您会看到如下内容:

 if ( regexp(line, "/#F/") ) {
   ...
}

然而,在 Perl 中,正则表达式的灵感来自于 awk 的语法。因此:

if ( $line =~ /#F/ ) {
   ...
}

=~意味着正则表达式将作用于左侧的变量名。如果在#F中找到该模式$line,则该if陈述为真。

如果您不熟悉正则表达式教程,则可能需要查看它们。正则表达式非常强大并且在 Perl 中非常常用。事实上,它们往往在 Perl 中被广泛使用,这也是其他语言的开发人员声称 Perl 是一种只写语言的原因之一。

于 2013-06-24T21:02:38.560 回答
1

=~的,绑定运算符是否将表达式绑定到模式匹配m//

if语句检查一行是否与给定的正则表达式匹配。在这种情况下,它会检查是否有一个散列符号后跟一个大写字母 F。

刚刚添加了反斜杠(可能)以避免将#其视为注释符号(不需要)。

于 2013-06-24T19:46:44.800 回答