为何Perl中$a = ("a","b","c")会返回数组最后一个元素?
Perl标量赋值的两种不同行为解析
Perl是典型的上下文敏感语言,赋值操作的结果完全取决于左侧变量对应的上下文类型,这就是你看到两种不同结果的核心原因:
第一种情况:
$a = ("a", "b", "c");
左侧是标量变量$a,所以整个赋值操作处于标量上下文。这里的括号只是用来改变运算优先级,右侧本质是Perl的逗号运算符表达式——在标量上下文中,逗号运算符会逐个计算每个子表达式,最终返回最后一个子表达式的值。所以("a", "b", "c")在标量上下文里等价于先计算"a"、再计算"b"、最后返回"c",最终$a被赋值为"c"。第二种情况:
$a = @arr;
同样左侧是标量上下文,但右侧是数组@arr。Perl规定,当数组处于标量上下文时,会直接返回数组的元素个数。所以@arr里有3个元素,$a就被赋值为3。
额外补充:如果想把列表/数组的第一个元素赋值给标量,可以这么写:
$a = ("a", "b", "c")[0]; # 直接取列表的第0个元素 # 或者数组的情况 $a = $arr[0];
内容的提问来源于stack exchange,提问作者Rioma
相关产品推荐
相关产品推荐

