Perlのプログラミングや利用方法を基本的を中心に情報提供しています
リストと配列
配列の宣言
配列を表す@(アットマーク)を先頭につけます。
変数名に使用できる名前 | |
@abc123 | 変数名として使用可能 |
@123abc | 数字から始まる名前は使用不可 |
@abc_123 | アンダースコアは使用可能 |
@abc-123 | ハイフンは使用不可 |
配列へ値を代入
配列には、コンマで値を区切り リストに複数の値を代入することができます。
#配列 値を代入例 1)
@place = ('東京', '神奈川', '神奈川', '茨城');
#配列 値を代入例 2)
@place[0] = "東京";
@place[1] = "神奈川";
@place[2] = "神奈川";
@place[3] = "茨城";
配列の要素数・要素の末尾への追加と削除 - push , pop -
配列の要素数を調べるには配列(@place)の要素数を$lengthという変数に入れると要素数が返ります。
#配列の要素数
@place = ('東京', '神奈川', '千葉', '茨城');
$length = @place;
#$lengthには4という値が入ります
配列関数
配列を操作するための関数として、次のような関数が用意されています。
関数 | 内容 |
push | 配列の末尾へ要素を追加 |
pop | 配列の末尾の要素を削除 |
unshift | 配列の先頭へ要素を追加 |
shift | 配列の先頭の要素を削除 |
splice | 配列の一部を削除 |
join | 配列の連結 |
split | パターンで分割 |
sort | 配列の順序をソートする |
reverse | 配列の順序を逆順にする |
grep | 条件にマッチした要素を取り出す |
map | 配列のすべての要素を変換 |
要素の末尾への追加と削除 - push , pop -
#■要素の末尾への追加
#①
@place = (@place, '栃木');
#②
#pushを利用
push @place_valu, '栃木';
#■要素の末尾の要素を削除
pop @place;
配列の先頭への追加と削除 - shift, unshift -
#■要素の末尾への追加
#①
@place = ('都道府県',@place);
#②
#unshiftを利用
unshift @place, '都道府県';
#■先頭の要素を削除
#shiftを利用
shift @place;
配列の操作 - splice -
配列の一部を削除。- splice -
#■splice (対象配列, 配列での位置, 削除する要素数)
@place = ('東京', '神奈川', '千葉', '茨城');
@delete_place = splice (@place, 1, 2);
print "\@place = @place\n";
#@place = 東京 茨城
print "\@delete_place = @delete_place\n";
#@delete_place = 神奈川 千葉
#■splice (対象配列, 配列での位置) 配列のある要素から最後までを削除
@place = ('東京', '神奈川', '千葉', '茨城');
@delete_place = splice (@place, 1);
print "\@place = @place\n";
#@place = 東京
print "\@delete_place = @delete_place\n";
#@delete_place = 神奈川 千葉 茨城
配列の連結 - join -
配列の各要素を連結して1つの文字列 - join -
@place = ('東京', '神奈川', '千葉', '茨城');
print join ('+', @place), "\n";
#@place = 東京+神奈川+千葉+茨城
@place = ('東京', '神奈川', '千葉', '茨城');
print join (',', @place), "\n";
#@place = 東京,神奈川,千葉,茨城
対象となる文字列を指定のパターンで分割 - split -
$str ='東京,神奈川,千葉,茨城';
@place = split(/,/, $str);
print "@place\n"; #東京 神奈川 千葉 茨城
#カンマ区切りをfor分で繰り返す
for ($i=0; $i<@place; $i++) {
print "@place[$i]\n";
}
#結果
東京
神奈川
千葉
茨城
配列の要素の並び替え - sort -
sortは、文字列をASCIIコード順に並び替えます
#数字の場合:文字列として評価されてソートされる
@num = (9, 8, 37, 6, 5, 3, 1);
@sort_num = sort @num;
print "@num\n"; #9 8 37 6 5 3 1
print "@sort_num\n"; #1 3 37 5 6 8 9
#数字の場合:数字として評価されてソート
@num = (21, 9, 92, 12, 132, 5, 56);
@sort_num = sort {$a <=> $b} @num;
print "@num\n"; #9 8 37 6 5 3 1
print "@sort_num\n"; #1 3 5 6 8 9 37
配列の要素の並び替え 逆順 - reverse -
reverseは、文字どおり配列の要素を逆順
# 文字列をASCIIコード逆順にソート
@place = ('東京', '神奈川', '千葉', '茨城');
@reverse_name = reverse(@place);
条件にマッチした要素を取り出す - grep -
# 条件にマッチした要素のみを取り出す
@array_match = grep { 条件文 } @array;
my @array=(2,4,5,7,8);
print "grep{ $_% 2 == 0 }@array"; #248
#上記と同じ
@array_match = grep {$_% 2 == 0} @array;
for my $num(@marray_match){
print "$num\n";
}
> 2
> 4
> 8
#上記と同じ
for my $num(@array){
if($num %2 == 0 ){
print "$num\n";
}
}
> 2
> 4
> 8
配列のすべての要素を変換 - map -
# 配列のすべての要素の変換
@array_new = map { 変換文 } @array;
# 先頭の空白を除く
my @str = (' a', ' b', ' c');
my @trim = map { $_ =~ s/^\s+//; $_ } @str;
#@trimは('a', 'b', 'c')となります