在 Perl 中,变量分为 标量 ($)、数组 (@) 和 哈希 (%):
标量 ($variable) – 存储一个值(字符串、数字):
my $name = "Ivan"; my $age = 30;
数组 (@array) – 一组有序元素(按数字索引):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
哈希 (%hash) – 一组键值对(关联数组):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
请注意,根据变量类型,访问元素时使用特定符号:
$array[0] — 数组元素$hash{"key"} — 按键获取哈希值@array[1,2] 和 $array[1,2] 有什么区别?
答案:
@array[1,2]— 提供多个数组元素的列表(切片)。$array[1,2]— 不正确,会导致错误。要访问多个数组元素仅使用切片@array[...]。示例:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
故事
在一个日志项目中,程序员通过
@colors{"red"}访问哈希元素。结果得到的不是哈希的值,而是随机错误,因为单个值需要$,而不是@。
故事
在一个服务中,遍历数组索引时忘记使用正确的访问方式 — 使用
@array$i而不是$array[$i],导致警告和错误结果。
故事
在 API 项目中描述了一个接受数组作为
$args的函数,而调用时传递了没有标量的数组:func(@list)。结果是数组元素“展开”为列表,函数的工作效果与预期不同。正确的做法是将数组作为@args接受。