foreach文を使った繰り返し処理

繰り返し処理の一つである foreach 文はリストに含まれる値を順に取り出して処理する場合に便利です。ここでは Perl における foreach 文を使った繰り返し処理を行う方法について解説します。

(Last modified: )

foreach文を使った繰り返し処理

foreach 文は for 文と似た構文です。 foreach は値の集合であるリストを指定すると、リストに含まれる値の数だけ順に繰り返しを行います。(リストについては別のページで詳しく見ていきます)。

foreach 文の書式は次のようになっています。

foreach 変数 (リスト){
  実行する処理1;
  実行する処理2;
}

リストに含まれる値を指定した変数に順に格納し、その度に繰り返し処理を 1 回行います。よって繰り返しされる回数はリストに含まれている値の数の分だけ行われます。

例えば 3 つの値が含まれるリストを使い、リストに含まれる値を順に出力するには foreach 文を使って次のように記述できます。

my @fruit = ("りんご", "メロン", "イチゴ");

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

リストの値を格納する制御変数は foreach 文よりも前で宣言を行ってもいいですし、この例のように foreach 文の中で宣言を行っても構いません。

なおリストの値を格納する変数を省略した場合はデフォルトの変数 $_ が使用されます。次の例を見てください。

my @fruit = ("りんご", "メロン", "イチゴ");

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

変数が省略されていますので、リストに含まれる各値は変数 $_ を使って取り出すことができます。

サンプルコード

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

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

my @fruit = ("りんご", "メロン", "イチゴ");

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

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

perl sample.pl

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

foreach文を使った繰り返し処理(1)

foreach 文を使ってリストに含まれる要素を順に取得し画面に表示しました。

for文とforeach文の関係

forforeach 文は実は同じ構文です。 for 文で制御変数とリストを指定すれば foreach 文のように動作しますし、 foreach 文に 3 つの制御部分を指定すれば for 文のように動作します。

for 文で統一してしまうことも可能ですが、混乱してしまう場合もありますのでリストを使う場合には foreach 文を使うようにしておくといいのではないかと思います。

サンプルコード

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

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

my @fruit = ("りんご", "メロン", "イチゴ");

for my $name (@fruit){
  print "$name\n";
}

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

perl sample.pl

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

for文とforeach文の関係(1)

今回は for 文に対して制御変数とリストを与えて実行しています。このように foreach 文と for 文は同じ使い方をすることができます。

-- --

Perl における foreach 文を使った繰り返し処理を行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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