如何使用smartmatch检查字符串是否匹配数组中的所有模式?



我想检查字符串是否匹配多个正则表达式模式。我遇到了一个相关的问题,Brad Gilbert用smartmatch操作符回答了这个问题:

my @matches = (
  qr/.*.so$/,
  qr/.*_mdb.v$/,
  qr/.*daidir/,
  qr/.__solver_cache__/,
  qr/csrc/,
  qr/csrc.vmc/,
  qr/gensimv/,
);
if( $_ ~~ @matches ){
  ...
}
如果任何模式匹配,则输入

if语句,但我想检查所有模式是否匹配。我该怎么做呢?

smartmatch操作符不支持。你必须自己建造它。List::MoreUtils的all看起来很棒。

use strict;
use warnings 'all';
use feature 'say';
use List::MoreUtils 'all';
my @matches = (
    qr/foo/,
    qr/ooo/,
    qr/bar/,
    qr/asdf/,
);
my $string = 'fooooobar';
say $string if all { $string =~ $_ } @matches;

没有输出。

如果您将$string更改为'fooooobarasdf',它将输出字符串

最新更新