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+)/;
我正在使用 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+)/;