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. 遍历数组

  • 使用 foreachfor 循环:
  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

如果你有具体问题或需要更复杂的数组操作示例,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注