Perl 数组
在 Perl 中,数组(Array) 是一种用于存储有序标量列表的数据类型,以 @
前缀标识。数组中的元素可以是数字、字符串或引用,访问元素时使用 $
前缀和索引(从 0 开始)。以下是关于 Perl 数组的详细说明:
1. 数组的定义与声明
- 使用
my
声明数组,限定其作用域。
my @numbers = (1, 2, 3); # 数字数组
my @strings = ("apple", "banana"); # 字符串数组
my @mixed = (1, "text", 3.14); # 混合数组
my @empty = (); # 空数组
2. 访问数组元素
- 使用
$
前缀和索引访问单个元素。
print $numbers[0]; # 输出 1
print $strings[1]; # 输出 banana
- 负索引从末尾开始计数:
print $numbers[-1]; # 输出 3(最后一个元素)
3. 数组操作
- 添加元素:
push
:在数组末尾添加元素。perl push @numbers, 4; # @numbers 变为 (1, 2, 3, 4)
unshift
:在数组开头添加元素。perl unshift @numbers, 0; # @numbers 变为 (0, 1, 2, 3, 4)
- 删除元素:
pop
:移除并返回末尾元素。perl my $last = pop @numbers; # $last = 4, @numbers = (0, 1, 2, 3)
shift
:移除并返回开头元素。perl my $first = shift @numbers; # $first = 0, @numbers = (1, 2, 3)
- 切片(Slice):访问多个元素。
my @subset = @numbers[0, 2]; # 返回 (1, 3)
4. 数组长度
- 在标量上下文中,数组返回元素个数。
my $length = @numbers; # 返回 3
print scalar @numbers; # 显式标量上下文,返回 3
- 获取最大索引:
$#array
返回最后一个索引。
print $#numbers; # 输出 2(最后一个索引)
5. 遍历数组
- 使用
foreach
或for
循环:
foreach my $num (@numbers) {
print "$num "; # 输出 1 2 3
}
- 使用默认变量
$_
:
foreach (@numbers) {
print "$_ "; # 输出 1 2 3
}
- 使用索引:
for my $i (0 .. $#numbers) {
print "$numbers[$i] "; # 输出 1 2 3
}
6. 数组操作函数
- sort:排序数组。
my @sorted = sort @strings; # 返回 ("apple", "banana")
my @num_sorted = sort { $a <=> $b } @numbers; # 数字排序,返回 (1, 2, 3)
- reverse:反转数组。
my @reversed = reverse @numbers; # 返回 (3, 2, 1)
- join:将数组元素连接为字符串。
my $str = join(", ", @strings); # 输出 apple, banana
- split:将字符串拆分为数组。
my $text = "a,b,c";
my @array = split(",", $text); # 返回 ("a", "b", "c")
7. 数组引用
- 数组可以存储在标量中作为引用:
my $array_ref = [1, 2, 3]; # 匿名数组引用
print $array_ref->[1]; # 输出 2
- 解引用:
my @arr = @$array_ref; # 还原为数组 (1, 2, 3)
8. 上下文
- 列表上下文:数组返回所有元素。
my @copy = @numbers; # 复制整个数组
- 标量上下文:返回元素个数。
my $count = @numbers; # 返回 3
9. 注意事项
- 严格模式:使用
use strict;
强制声明变量。
use strict;
my @arr = (1, 2, 3); # 必须声明
- 未定义元素:访问不存在的索引返回
undef
。
print defined $numbers[10] ? "Defined" : "Undefined"; # 输出 Undefined
- 动态扩展:数组可以动态增长,赋值给不存在的索引会自动扩展数组。
$numbers[10] = 99; # 数组扩展,中间填充 undef
10. 示例:简单统计
以下是一个统计数组中偶数的示例:
my @numbers = (1, 2, 3, 4, 5, 6);
my $even_count = 0;
foreach (@numbers) {
$even_count++ if $_ % 2 == 0;
}
print "Even numbers: $even_count\n"; # 输出 Even numbers: 3
如果你有具体问题或需要更复杂的数组操作示例,请告诉我!