为什么正则表达式捕获组在分配给标量变量时不会返回捕获的文本?

ES5*_*S55 1 regex perl capturing-group

我想捕获包含在文件的某些行中的数字.我正在使用Perl,我正在使用匹配运算符来捕获相对于文件行中其他符号在特定位置发生的数字.这是一个示例行:

fixedStep chrom=chr1 start=3000306 step=1
Run Code Online (Sandbox Code Playgroud)

以下是脚本的相关部分:

while ( <FILE> ) {
        if ( $_=~m/fixedStep/ ) {
             my $line = $_;
             print $line;
             my $position = ($line =~ /start\=(\d+)/);

             print "position is $position\n\n";

}
Run Code Online (Sandbox Code Playgroud)

$position打印为1,而不是我需要的数字.根据在线正则表达式工具regex101.com,我正在使用的正则表达式工作; 它捕获了该行中的相应元素.

cho*_*oba 6

要从匹配中获取捕获组,您必须在列表上下文中调用它.可以通过将赋值运算符左侧的标量括在括号中来打开它:

my ($position) = $line =~ /start=(\d+)/;
Run Code Online (Sandbox Code Playgroud)

请注意,=在正则表达式中并不特殊,因此无需反斜杠.\d如果你的输入是unicode,也要小心- 你可能不想匹配非阿拉伯数字(如四或五).