为什么括号在分配此正则表达式匹配时如此重要?

Sen*_*mar 4 regex perl

我有一段代码:

$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n";               # Output is 'sekar kapoor'
Run Code Online (Sandbox Code Playgroud)

如果在第二行代码中删除了括号,则在变量中$name:

$name = $s =~ /<([\S\s]*)>/;   # $name is now '1'
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它会像这样.任何人都可以解释为什么会这样吗?

mar*_*ton 8

在您的第一个示例中,您在左侧有一个列表上下文(您使用了括号); 在第二个你有一个标量上下文 - 你只有一个标量变量.

有关类似引用的操作,请参阅Perl文档,在列表上下文中匹配:

如果/g未使用该选项,则m//在列表上下文中返回一个列表,该列表由模式中括号匹配的子表达式组成,即($1 , $2 , $3...).
(注意,这里$1 也设置了等等,这与Perl 4的行为不同.)
当模式中没有括号时,返回值是(1)成功列表 .有或没有括号,失败时返回一个空列表.