配列と繰り返し処理

配列に含まれる要素を順に取り出して処理するといったことはよく行われる処理です。このような場合は繰り返し処理の for 文や foreach 文と組み合わせると便利です。ここでは Perl で繰り返し処理を使って配列を扱う具体的な方法について解説します。

(Last modified: )

配列と繰り返し処理

配列と組み合わせて繰り返し処理を行う場合、 for 文または foreach 文を使うことが多いです。

for文と配列の組み合わせ

配列名が @array だった場合、配列の最後の要素のインデックスは $#month に格納されているので、 for 文使って配列の要素に格納されている値を最初から最後まで順に取り出す場合は次のような記述を行います。

my @array = ("東京都", "大阪府", "愛知県");
for (my $i = 0; $i <= $#array; $i++){
  print "$array[$i]\n";
}

または配列名が @array だった場合、要素の数は @array で参照できるので、配列の要素に格納されている値を最初から最後まで順に取り出す場合は次のような記述を行います。

my @array = ("東京都", "大阪府", "愛知県");
for (my $i = 0; $i < @array; $i++){
  print "$array[$i]\n";
}

要素の数が 3 だった場合、最後の要素のインデックスは 2 で要素数は 3 となる点に注意してください。(インデックスは 0 から始まるためです)。

foreach文と配列の組み合わせ

foreach 文の場合はインデックスを変化させる方法と要素を順に取り出す方法があります。

下記では 0 から配列の最後のインデックスまでのリストを範囲演算子を使って作成し、 foreach 文の括弧 () の中に記述しています。 foreach 文はリストの要素を順に取り出して変数 $1 に格納します。 $1 はインデックスの値が格納されているので $arrya[$i] で指定のインデックスの要素の値を取得できます。

my @array = ("東京都", "大阪府", "愛知県");
foreach my $i(0 .. $#array){
  print "$array[$i]\n";
}

foreach 文の場合は括弧 () の中に配列を指定すると、配列の要素の値を順に取り出して変数 $var に格納しますので、変数の値を取得することで要素の値を取得できます。

my @array = ("東京都", "大阪府", "愛知県");
foreach my $var(@array){
  print "$var\n";
}

また繰り返し処理の中で要素の値を格納する変数を省略して、デフォルトの変数 $_ を使用する場合は次のように記述できます。

my @array = ("東京都", "大阪府", "愛知県");
foreach (@array){
  print "$_\n";
}

いずれの場合も繰り返し処理は配列の要素の数だけ行われます。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my @name = ("加藤", "山田", "林");

for (my $i = 0; $i < @name; $i++){
  print "$name[$i]\n";
}

print "----\n";

foreach (@name){
  print "$_\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

配列と繰り返し処理(1)

3 つの値を持つ配列を作成し、 for 文と foreach 文を使って要素に格納されている値を取得して画面に出力しました。

-- --

Perl で繰り返し処理を使って配列を扱う具体的な方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。