数组存储值的有序序列。您可以按索引访问内容,也可以对其进行迭代。这些值将保持您填写它们的顺序。
my @numbers_to_ten = (1,2,3,4,5,6,7,8,9,10); # More conveniently: (1..10) my @chars_of_hello = ('h','e','l','l','o'); my @word_list = ('Hello','World'); # Note the sigil: access an @array item with $array[index] my $second_char_of_hello = $chars_of_hello[1]; # 'e' # Use negative indices to count from the end (with -1 being last) my $last_char_of_hello = $chars_of_hello[-1]; # Assign an array to a scalar to get the length of the array my $length_of_array = @chars_of_hello; # 5 # You can use $# to get the last index of an array, and confuse Stack Overflow my $last_index_of_array = $#chars_of_hello; # 4 # You can also access multiple elements of an array at the same time # This is called "array slice" # Since this returns multiple values, the sigil to use here on the RHS is @ my @some_chars_of_hello = @chars_of_hello[1..3]; # ('H', 'e', 'l') my @out_of_order_chars = @chars_of_hello[1,4,2]; # ('e', 'o', 'l') # In Python you can say array[1:-1] to get all elements but first and last # Not so in Perl: (1..-1) is an empty list. Use $# instead my @empty_list = @chars_of_hello[1..-1]; # () my @inner_chars_of_hello = @chars_of_hello[1..$#chars_of_hello-1]; # ('e','l','l') # Access beyond the end of the array yields undef, not an error my $undef = $chars_of_hello[6]; # undef
数组是可变的:
use utf8; # necessary because this snippet is utf-8 $chars_of_hello[1] = 'u'; # ('h','u','l','l','o') push @chars_of_hello, ('!', '!'); # ('h','u','l','l','o','!','!') pop @chars_of_hello; # ('h','u','l','l','o','!') shift @chars_of_hello; # ('u','l','l','o','!') unshift @chars_of_hello, ('¡', 'H'); # ('¡','H','u','l','l','o','!') @chars_of_hello[2..5] = ('O','L','A'); # ('¡','H','O','L','A',undef,'!') whoops! delete $chars_of_hello[-2]; # ('¡','H','O','L','A', '!') # Setting elements beyond the end of an array does not result in an error # The array is extended with undef's as necessary. This is "autovivification." my @array; # () my @array[3] = 'x'; # (undef, undef, undef, 'x')
最后,您可以遍历数组的内容:
use v5.10; # necessary for 'say' for my $number (@numbers_to_ten) { say $number ** 2; }
当用作布尔值时,如果数组不为空,则为true。