过去人们认为在 Perl 正则表达式末尾包含“o”修饰符是有益的。目前的Perl 文档甚至似乎没有列出它,当然不是在perlre 的修饰符部分.
现在有什么好处吗?
It is如果没有其他原因,出于向后兼容性的原因,仍然被接受。
正如 J A Faucett 和 brian d foy 所指出的,如果您找到正确的位置(其中之一不是perlre
文档)。中提到了perlop页。它也被发现在佩尔雷夫 pages.
正如 Alan M 在接受的答案中指出的那样,更好的现代技术通常是使用 qr// (引用的正则表达式)运算符。
/o
已弃用。确保正则表达式仅编译一次的最简单方法是使用正则表达式对象,如下所示:
my $reg = qr/foo$bar/;
的插值$bar
当变量完成时$reg
被初始化,并且从那时起将在封闭范围内使用缓存的、编译的正则表达式。但有时你want要重新编译正则表达式,因为您希望它使用变量的新值。这是 Friedl 使用的示例The Book:
sub CheckLogfileForToday()
{
my $today = (qw<Sun Mon Tue Wed Thu Fri Sat>)[(localtime)[6]];
my $today_regex = qr/^$today:/i; # compiles once per function call
while (<LOGFILE>) {
if ($_ =~ $today_regex) {
...
}
}
}
在函数范围内,$today_regex 的值保持不变。但是下次调用该函数时,正则表达式将使用新值重新编译$today
。如果他刚刚使用:
if ($_ =~ m/^$today:/io)
...正则表达式永远不会更新。因此,使用对象形式,您可以在不牺牲灵活性的情况下获得 /o 的效率。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)