我有一段代码:
$s = "<sekar kapoor>"; ($name) = $s =~ /<([\S\s]*)>/; print "$name\n"; # Output is 'sekar kapoor'
$name = $s =~ /<([\S\s]*)>/; # $name is now '1'
我不明白为什么它会像这样.任何人都可以解释为什么会这样吗?
解决方法
在您的第一个示例中,您在左侧有一个列表上下文(您使用了括号);在第二个你有一个标量上下文 – 你只有一个标量变量.
请参阅Perl docs for quote-like ops,匹配列表上下文:
If the
/g
option is not used,m//
in
list context returns a list consisting
of the subexpressions matched by the
parentheses in the pattern,i.e.,($1
…).
,$2,$3
(Note that here$1
etc. are also set,and that this
differs from Perl 4’s behavior.)
When there are no parentheses in the
pattern,the return value is the list(1)
for success. With or without parentheses,an empty list is returned upon failure.