任何人都可以解释为以下两种语法之间的区别:
($x) = $a =~ /(\d+)/; $y = $a =~ /(\d+)/;
在示例中,如果$a = 100lkj则
$x = 100但$y = 1.
我不明白为什么?
解决方法
在括号内写入变量时,会强制列出上下文.这意味着,您要分配给该变量的内容也将被解释为列表.
在您的情况下,您有一个正常的匹配.匹配的返回值是一个列表,包含所有匹配项.如果将列表强制转换为标量上下文,则返回此列表中的条目数.所以你有1个匹配,这意味着这个列表包含1个匹配.
不建议使用正则表达式的返回值.
您可以使用变量$1,$2,$3,…作为匹配项(括号中的匹配项).
在你的情况下:
$a =~ /(\d+)/; $x = $1;
BTW:$a和$b是排序的特殊变量.请不要使用它们:).
($x) = $a =~ /(\d+)/; # $x is the first element of the RegEx return value # ($x,$y,$z) = $a =~ /(\d)(\d)(\d)/; # $x = first match,$y = second and so on.