我有一段代码:
$s = "<sekar kapoor>";
($name) = $s =~ /<([\S\s]*)>/;
print "$name\n"; # Output is 'sekar kapoor'
如果在第二行代码中删除了括号,请在变量$name
中删除:
$name = $s =~ /<([\S\s]*)>/; # $name is now '1'
我不明白为什么它会像这样。任何人都可以解释为什么会这样吗?
答案 0 :(得分:8)
在你的第一个例子中,你在左侧有一个列表上下文(你使用了括号);在第二个你有一个标量上下文 - 你只有一个标量变量。
请参阅Perl docs for quote-like ops,匹配列表上下文:
如果未使用
/g
选项,则m//
位于。{ list context返回一个包含的列表 与表达式匹配的子表达式 模式中的括号,即($1 , $2 , $3
...) (请注意$1
等等也都设定了 与Perl 4的行为不同。)
如果没有括号 模式,返回值是列表(1)
取得成功。有还是没有 括号,返回一个空列表 失败时。