推荐答案
测试一下
题目
和标量值类似 ,列表值也可以赋给变量 :
参考答案与知识点
参考答案
在 Perl 中,列表赋值时若左侧变量个数与右侧值的个数不同,不会报错,而是按规则自动调整。若左侧变量多于右侧值,则多出的变量被赋予 undef;若左侧变量少于右侧值,则右侧多余的值被丢弃。例如:($a, $b, $c) = (1, 2); 则 $a=1, $b=2, $c=undef;($a, $b) = (1, 2, 3); 则 $a=1, $b=2,值 3 被丢弃。此特性使得交换变量值变得简洁:($fred, $barney) = ($barney, $fred); 实际执行时右侧先构造成列表并计算值,再赋值给左侧,因此无需临时变量。易错点:误以为会语法错误或运行时警告,但 Perl 默认静默处理;部分初学者认为左侧多出的变量会保持原值,实则被重置为 undef。
涉及知识点
- Perl 列表赋值
- 左右元素数量不匹配处理
- undef 赋值
- 列表上下文
- 变量交换的 Perl 实现
- 与 C 语言区别