Perl:($num)和$num之间的区别



有人可以向我解释为什么这是diff:

my $num = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(d{3,})/;
> $num = 1
my ($num) = '>33*1311875297587*eval*0*frame[0]*"A"<' =~ /(d{3,})/;
> $num = 1311875297587

我非常好奇,想知道有什么恶作剧在等着我。

谢谢

在 Perl 中,括号通常只是改变优先级。(例如3+4*5vs(3+4)*5)

例外情况是在赋值运算符的左侧 (LHS) 中找到括号时。在这种情况下,它会影响将使用 Perl 的两个赋值运算符中的哪一个。

如果分配的 LHS 是某种聚合,则使用列表分配。否则,将使用标量赋值。以下内容被视为聚合:

  • (...)(任何以参数表示的表达式)
  • @array@array[...]
  • %hash@hash{...}
  • my (...)our (...)local (...)(state (...)抛出错误。

请参阅迷你教程:标量与列表赋值运算符,了解这两个运算符之间的差异。

在您的情况下,相关差异是评估分配的右侧 (RHS) 的上下文。

  • 量赋值在标量上下文中评估其 RHS 操作数。在标量上下文中,匹配运算符返回一个布尔值,指示成功或失败。
  • 列表
  • 赋值在列表上下文中评估其 RHS 操作数。 在列表上下文中,match 运算符返回它捕获的字符串(如果匹配成功且模式不包含捕获,则返回1)。

最新更新