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;
}
}
我发现 =~ 是我认为的正则表达式,但我不太明白它在这里做什么。
它将第一行分配给$titlecolumn
包含一个#
后跟一个的F
。
是绑定运算符=~
并将正则表达式应用于字符串。该正则表达式通常写为. 前缀可以用来强调后面的文字是前缀(在使用其他分隔符时很重要)。/#F/
m
它被称为绑定运算符。它用于将 RHS 上的模式与 LHS 上的变量匹配。同样,您得到了!~
否定匹配的结果。
对于您的特定情况:
$line =~ m/\#F/
这个测试是否$line
匹配模式 - /#F/
。
你了解什么是正则表达式吗?或者,是=~
把你扔了?
在大多数编程语言中,您会看到如下内容:
if ( regexp(line, "/#F/") ) {
...
}
然而,在 Perl 中,正则表达式的灵感来自于 awk 的语法。因此:
if ( $line =~ /#F/ ) {
...
}
这=~
意味着正则表达式将作用于左侧的变量名。如果在#F
中找到该模式$line
,则该if
陈述为真。
如果您不熟悉正则表达式教程,则可能需要查看它们。正则表达式非常强大并且在 Perl 中非常常用。事实上,它们往往在 Perl 中被广泛使用,这也是其他语言的开发人员声称 Perl 是一种只写语言的原因之一。
是=~
的,绑定运算符是否将表达式绑定到模式匹配m//
。
该if
语句检查一行是否与给定的正则表达式匹配。在这种情况下,它会检查是否有一个散列符号后跟一个大写字母 F。
刚刚添加了反斜杠(可能)以避免将#
其视为注释符号(不需要)。