原文: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', ];