気の向くままに辿るIT/ICT/IoT
Perl

Perl foreach文/foreachループ

ホーム前へ次へ
Perlのforeach文はどうやって書くの?

Perl foreach文/foreachループ

Perl foreach文/foreachループ

 Perlの反復・ループの構文には、文字をキーとする順序が保証されない連想配列(≒ハッシュ)や順序が保証される格納順が一意な配列の要素を1つずつ取得可能なforeachループの他、fordo...while/do...untilがあります。

foreach文

 foreach文は、ハッシュとして格納されたハッシュ値や配列の要素をひとつずつ取得しながらハッシュや配列の要素がなくなるまでループします。

 ハッシュの場合には、キーとなる文字列を取り出す場合には、 keys 、値を取り出すには values 、両方取り出すには each 関数を利用します。

# 代入例

 %hash=("alphabet"=>"abc" , "num"=>"123" , "japanese"=>"あいう" )

# 関数 keys

 foreach $key ( keys %hash ) {

    # $key:キー(alphabet/num/japanese)

    print "\$key:$key\n";

    # $hash{$key}:値(abc/123/あいう)

    print "\$hash{\$key}:$hash{$key}\n";

 } 

# 関数 values

 foreach $value ( values %hash ) {

    # $value:値(abc/123/あいう)

    print "\$value:$value\n";

 } 

# 関数 each

 foreach ( ($key , $value ) = each %hash ) {

    # alphabet=abc/num=123/japanese=あいう

    print "$key=$value\n";

 } 

# この場合、%hash内のセットが全て取りだされるまでは式が真となることから実際にはforeach文(Perlではfor文でさえも利用できてしまうがそれ)よりもむしろwhile文を使うことが多い

 キーとなる値でソートしたい場合には、sort関数を使います。

 foreach $key ( sort keys %hash ) {

    print "\$hash{\$key}:$hash{$key}\n";

 } 

 尚、この例の場合には、foreach文でカッコ内の式が真の間$keyを1つずつ取得するので、それが有効か否かは別として任意の変数$keyを使わずに直前の値を1つ保持するPerlの特殊な変数$_を利用することもできます。

 foreach ( sort keys %hash ) 

 { 

 "$_\n"; 

 "\$hash{\$_}=$hash{$_}\n"; 

 } 

 行の終わり(処理の区切り)を示すセミコロンを適切に付加すれば、どんなに長くても1行で記述もできてしまいますが、ワンライナーでない限り、その可読性など有用性を考慮して例えば処理が1つの場合などに1行で記述されることもあります。

 foreach $key ( sort keys %hash ) { print "\$hash{\$key}:$hash{$key}\n"; } 

ホーム前へ次へ