原文:http://perl5maven.com/perl-arrays
在本篇Perl教程中,我們將會學習Perl中的陣列.本文只是對Perl中的陣列進行了一下概述,在以後的文章中,我們還會更加詳細的講解.
在Perl中,陣列型別的變數名稱以@符號開頭.
因為我們堅決要求在自己的程式碼中使用嚴格模式(use strict),所以在使用陣列變數前,你必須使用my關鍵字來宣告它.
要注意,我們假定本文中所有的程式碼示例都已經包含了下面這樣的檔案頭:
use strict;
use warnings;
use 5.010;
首先,宣告一個陣列變數是這樣寫的:
my @names;
然後是宣告變數的同時並進行初始化:
my @names=("Foo","Bar","Baz");
列印陣列
use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");
say Dumper \@names;
輸出結果如下:
$VAR1 =[
'Foo',
'Bar',
'Baz' ];
遍歷陣列
my @names = ("Foo","Bar","Baz");
foreach my $n (@names){
say $n;
}
輸出結果如下:
Foo
Bar
Baz
訪問陣列元素
my @names = ("Foo","Bar","Baz");
say $names[0];
這裡需要特別注意的是:當訪問某單個的陣列元素的時候,變數名的前導符號應該使用$,而不是原來的@.有些人也許不理解為什麼要這麼做,但其實原因也很簡單.
你只需要理解:@符號表示雙數,而$符號表示單數.當訪問單個的陣列元素時,該元素表現的完全和普通標量變數相同,所以要用$.
獲取陣列中的最大索引號
陣列的索引號最小從0開始,最大索引號的值可以通過$#name_of_the_array變數獲取到,所以:
my @names = ("Foo","Bar","Baz");
say $#names;
會輸出2,因為陣列的索引號只有3個:0,1,2.
計算陣列長度
在Perl中,並沒有一個專門用來獲取陣列長度的函式,但是還是可以通過其他方法獲取到的.第一種辦法就是:陣列的長度其實就是陣列的最大索引號加1,因此,如果想獲取上例中的陣列(@names)的長度,則可以使用表示式$#names+1來計算得出.
另外,還可以使用scalar函式來獲取陣列的長度:
my @names = ("Foo","Bar","Baz");
say scalar @names;
上例將會輸出3.
遍歷陣列索引
在某些情況下,我們不光需要遍歷到陣列元素的值,還需要遍歷到元素值對應的索引.這種情況下,我們就需要這麼做:
my @names = ("Foo","Bar","Baz");
foreach my $i (0.. $#names) { say "$i - $names[$i]";
}
輸出結果如下:
0-Foo
1-Bar
2-Baz
Push函式
push函式會在原陣列的最右邊插入一個新的陣列元素.
use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");
push @names,'Moo';
say Dumper \@names;
輸出結果如下:
$VAR1 =[
'Foo',
'Bar',
'Baz',
'Moo' ];
Pop函式
pop函式會從原陣列中刪除最右邊的那個陣列元素,並且返回刪掉的那個元素.
use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");
my $last_value = pop @names;
say "Last: $last_value";
say Dumper \@names;
輸出結果如下:
Last:Baz
$VAR1 =[
'Foo',
'Bar', ];
shift函式
shift函式會從原陣列中刪除最左邊的那個陣列元素,並且返回刪掉的那個元素.
use Data::Dumper qw(Dumper);
my @names = ("Foo","Bar","Baz");
my $first_value = shift @names;
say "First: $first_value";
say Dumper \@names;
輸出結果如下:
First:Foo
$VAR1 =[
'Bar',
'Baz', ];