Perlの配列の仕組みと使い方のサンプルです。確認環境(Perl 5.26.3)
仕組み | 配列とは |
作成する | 配列を作成する |
更新する | 配列の末尾に値を追加する |
配列の先頭に値を追加する | |
配列の値を更新する | |
取得する | 配列の値をfor文で取得する |
ソートする | 配列の値をソートする |
2次元 | 二次元配列を作成する |
配列とは
@a = ( 値1 , 値2 , 値3 ); |
上記は複数の値を変数aに代入しています。
この変数aは配列として複数の値を持ちます。
配列の図
- 1つの変数で複数の値を保持できます。
- 各項目を要素(element)といいます。
- 要素の順序をインデックス(添字)で管理します。上記図では[0]、[1]、[2]、[3]がインデックスです。
- インデックスの先頭は0から始まります。
- 以下はPerl公式の日本語翻訳サイトの配列のリンクです。
https://perldoc.jp/docs/perl/5.14.1/perllol.pod
配列を作成する
配列を作成するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @color = ('赤','黄','青');
print ($color[0]); # 赤
print ($color[1]); # 黄
print ($color[2]); # 青
my @a1 = ();
$a1[0] = "白";
$a1[1] = "黒";
print ($a1[0]); # 白
print ($a1[1]); # 黒
5行目は、配列を作成しています。
11行目のように最初は空で後から値を追加することもできます。
配列の末尾に値を追加する
配列の末尾に値を追加するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @color = ("赤","黄","青");
$color[3] = "白";
print ($color[0]); # 赤
print ($color[1]); # 黄
print ($color[2]); # 青
print ($color[3]); # 白
push @color,'黒';
print ($color[4]); # 黒
7行目は、インデックスを指定して値を配列の末尾に追加しています。
14行目は、push関数で値を配列の末尾に追加しています。
配列の先頭に値を追加する
配列の先頭に値を追加するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @color = ("赤","黄","青");
unshift @color,"白";
print ($color[0]); # 白
print ($color[1]); # 赤
print ($color[2]); # 黄
print ($color[3]); # 青
7行目は、unshift関数で配列の先頭に値を追加しています。
配列の値を更新する
配列の値を更新するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @color = ("赤","黄","青");
$color[1] = "オレンジ";
print ($color[0]); # 赤
print ($color[1]); # オレンジ
print ($color[2]); # 青
7行目は、5行目の配列のインデックスの1(黄)を指定しています。更新になり文字が置き換わります。
配列の値をfor文で取得する
配列の値をfor文で取得するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @color = ("赤","黄","青");
for(my $i=0; $i<=$#color;$i++){
print $color[$i]; # 赤黄青
}
foreach my $c1 (@color){
print $c1; # 赤黄青
}
7行目は、for文です。条件式の$#colorは2を返します。配列の最後の要素のインデックス値です。
11行目は、foreach文です。配列の値分ループします。
配列の値をソートする
配列の値をソートするサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @a1 = (100,2,99);
@a1 = sort{$a <=> $b}@a1;
#@a1 = sort{$b <=> $a}@a1; #降順にする場合
print ($a1[0]); # 2
print ($a1[1]); # 99
print ($a1[2]); # 100
my @a2 = ("da","abb","pccc");
@a2 = sort{$a cmp $b}@a2;
#@a2 = sort{$b cmp $a}@a2; #降順にする場合
print ($a2[0]); # abb
print ($a2[1]); # da
print ($a2[2]); # pccc
5行目は、数値の配列です。
7行目は、昇順でソートをしています。
結果は、2,99,100になります。100,2,99にはなりません。
14行目は、文字列の配列です。
16行目は、昇順でソートをしています。
結果は、先頭の文字のabc順に表示されます。
二次元配列を作成する
二次元配列を作成するサンプルです。
#! /usr/bin/perl
use strict;
use warnings;
my @a = (
["赤","黄","青"],
["緑","白","黒"]
);
print ($a[0][0]); # 赤
print ($a[0][1]); # 黄
print ($a[0][2]); # 青
print ($a[1][0]); # 緑
print ($a[1][1]); # 白
print ($a[1][2]); # 黒
#入れ子の構造
my @b = (
"色の種類",
["赤","黄","青"],
["緑","白","黒"]
);
print ($b[0]); # 色の種類
print ($b[1][0]); # 赤
print ($b[1][1]); # 黄
print ($b[1][2]); # 青
5~8行目は、二次元の配列を作成しています。
10~15行目は、インデックス番号を2つ使用して配列の値を参照しています。
18~22行目は、入れ子の構造の配列を作成しています。
関連の記事
Perl if文のサンプル
Perl while文とdo…while文のサンプル
Perl for文 処理を繰り返すサンプル(last/next)