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:在数组末尾添加元素。
      push @numbers, 4;  # @numbers 变为 (1, 2, 3, 4)
      
    • unshift:在数组开头添加元素。
      unshift @numbers, 0;  # @numbers 变为 (0, 1, 2, 3, 4)
      
  • 删除元素
    • pop:移除并返回末尾元素。
      my $last = pop @numbers;  # $last = 4, @numbers = (0, 1, 2, 3)
      
    • shift:移除并返回开头元素。
      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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值