You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl条件(三目)运算符未按预期实现短路求值问题

问题原因

这个异常结果是Perl运算符优先级规则导致的,和三目运算符本身的条件分支逻辑无关。

Perl中条件运算符?:的优先级高于所有赋值类运算符(包括=、.=等),你写的无括号表达式不会按照你预期的逻辑分组。

你编写的代码:

1 ? $s .= '_' : $s = '_'

会被Perl编译器默认解析为:

(1 ? ($s .= '_') : $s) = '_'

执行流程

  1. 条件1为真,进入?后的分支,执行$s .= '_',此时$s的值暂时变为X_
  2. Perl的三目运算符支持返回可修改的左值,这里条件为真,所以三目运算的返回值就是变量$s本身
  3. 最后执行赋值操作= '_',把$s的值直接覆盖为_

因此最终输出的$s是_,而不是你预期的X_。

解决方案

如果要实现“条件为真时拼接下划线,为假时赋值为下划线”的预期逻辑,需要给两个分支显式加括号,强制改变优先级:

1 ? ($s .= '_') : ($s = '_')

执行后$s的值就会是预期的X_。


内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:27:00