gpt4 book ai didi

regex - 使用什么代替Smartmatch?

转载 作者:行者123 更新时间:2023-12-04 22:27:32 27 4
gpt4 key购买 nike

我刚刚升级到Perl 5.26.1,现在我得到了

Smartmatch is experimental at check_tr.pl line 67.


问题代码在哪里

my @patterns = (qr/summary:\s+(.+?) in\s+(.+?) - average of\s+(.+?)$/,
qr/summary:\s+(.+?) in\s+(.+) (.+? .+?)$/);
my $r = "";
opendir(DIR, $dir) or die $!;
while(my $file = readdir(DIR)) {

next if ($file =~ m/^\./);
open(F, '<', "$dir/$file") or die $!;

if (<F> ~~ @patterns) {
$r .= <F>;
...




理想情况下,对代码的更改应尽可能少。我应该怎么做才能代替智能匹配?

最佳答案

只是说出你的意思。例如。如果要检查标题行是否与@patterns中的任何正则表达式匹配:

use List::Util 'any';
...
my $line = <F>;
if (any { $line =~ $_ } @patterns) { ... }


尽管在这种情况下,预编译单个模式可能更明智,例如:

my ($pattern) = map qr/$_/, join '|', @patterns;
...
if (<F> =~ $pattern) { ... }


如果您的 @patterns数组包含不同类型的数据,则可能需要选择其他匹配运算符,例如 ==eq。如果 @patterns并非都是相同的“类型”,并且您确实想要智能匹配行为,则可以使警告消失并继续使用它:

use experimental 'smartmatch';


但是,将来可能会在没有进一步警告的情况下中断此操作。

关于regex - 使用什么代替Smartmatch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921083/

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