gpt4 book ai didi

regex - Perl 正则表达式的 'o' 修饰符是否仍然提供任何好处?

转载 作者:行者123 更新时间:2023-12-03 07:32:42 25 4
gpt4 key购买 nike

过去人们认为在 Perl 正则表达式末尾包含“o”修饰符是有益的。当前Perl documentation甚至似乎没有列出它,当然不在modifiers section of perlre .

现在有什么好处吗?

如果没有其他原因,出于向后兼容性的原因,它仍然被接受。

<小时/>

正如 J A Faucett 和 brian d foy 所指出的,如果您找到合适的位置(其中之一不是 perlre 文档),“o”修饰符仍然有文档记录。 perlop中提到页。它也可以在 perlreref 中找到。页。

正如 Alan M 在接受的答案中所指出的,更好的现代技术通常是使用 qr//(引用的正则表达式)运算符。

最佳答案

/o 已弃用。确保正则表达式仅编译一次的最简单方法是使用正则表达式对象,如下所示:

my $reg = qr/foo$bar/;

$bar 的插值是在变量 $reg 初始化时完成的,并且从那时起将在封闭范围内使用缓存的编译正则表达式。但有时您希望重新编译正则表达式,因为您希望它使用变量的新值。这是 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)

...正则表达式永远不会更新。因此,使用对象形式,您可以在不牺牲灵 active 的情况下获得/o 的效率。

关于regex - Perl 正则表达式的 'o' 修饰符是否仍然提供任何好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com