perldoc 说"标量上下文中的列表赋值返回列表赋值右侧的元素数",但是当我尝试这段代码时:
perl -e '$_="aaaaa";print $v=(()=split //)'
Run Code Online (Sandbox Code Playgroud)
输出1让我感到困惑.(我期待的答案是5.)
任何人都能解释一下吗?
split 它中有一些疯狂的超魔法,它可以让它知道它在左侧有一个列表的作业的右侧,并根据该列表中的项目数量调整其行为.
这被描述perlfunc为"避免不必要的工作",但是您发现由该优化引起的行为的可观察差异.
要查看发生了什么的证据,请通过Deparse运行脚本,如下所示:
perl -MO=Deparse -e '$_="aaaaa";print $v=(()=split //)'
Run Code Online (Sandbox Code Playgroud)
更新:我去寻找实现这个的代码,而不是我预期的那样.实际上,优化由赋值运算符(op.c:Perl_newASSIGNOP)执行.分裂对其背景知之甚少.