[譯]Perl中的陣列

weixin_34377065發表於2013-04-02

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

相關文章