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;
}
}
我发现=〜是我认为的正则表达式,但我不太明白它在这里做了什么。
答案 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.
刚刚添加了反斜杠(可能),以避免将#
视为注释符号(不需要)。