在Perl中= ~m / \ #F /表示什么?

时间:2013-06-24 19:43:27

标签: regex perl

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 个答案:

答案 0 :(得分:5)

它将第一行分配给$titlecolumn,其中包含#后跟F

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

答案 1 :(得分:3)

它被称为Binding Operator。它用于匹配RHS上的模式与LHS上的变量。同样地,你有!~否定了匹配。

针对您的具体情况:

$line =~ m/\#F/

此测试$line是否与模式匹配 - /#F/

答案 2 :(得分:3)

你明白正则表达式是什么吗?或者,=~是否会让你失望?

在大多数编程语言中,您会看到类似这样的内容:

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

然而,在Perl中,正则表达式受到Awk语法的启发。因此:

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

=~表示正则表达式将作用于左侧的变量名称。如果在#F中找到模式$line,则if语句为真。

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

答案 3 :(得分:1)

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

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

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