perl 正则表达式捕获 returns 相同的值 (1)

perl regex capture returns same value (1)

我正在使用 perl 5.28。这是我的脚本

 #!/usr/bin/perl
 use strict; use warnings;
 
my @files = glob("msa_vcf/*vcf");

foreach my $f (@files){
    my $wk = $f =~ /(\d+)/;
    print "$wk    $f\n";
}

非常简单的东西,但这就是它打印的内容

1    msa_vcf/1.vcf
1    msa_vcf/10.vcf
1    msa_vcf/11.vcf
1    msa_vcf/12.vcf
1    msa_vcf/13.vcf
1    msa_vcf/14.vcf
1    msa_vcf/15.vcf
1    msa_vcf/16.vcf
1    msa_vcf/17.vcf
1    msa_vcf/18.vcf
1    msa_vcf/19.vcf
1    msa_vcf/2.vcf
1    msa_vcf/20.vcf

如果我在 python 中使用 re 库执行此操作,我将获得捕获的正确值。正则表达式语法相同,那是怎么回事?

您正在评估标量上下文中的匹配。结果返回匹配成功与否。

您想评估列表上下文中的匹配项。这是通过使赋值的左侧“类似列表”来完成的。

my ($wk) = $f =~ /(\d+)/;