redo演算子

広告

「last」演算子や「next」演算子の他に「redo」演算子が用意されています。「redo」演算子はその時の繰り返しを先頭の位置まで戻し改めて繰り返し処理を行います。書式は次の通りです。

redo;

例えば次の例で考えてみます。

my $count = 0;

while ($count <= 5){
  #redo演算子が実行されるとこの位置に進む

  $count++;

  if ($count == 2){
    redo;
  }

  print "$count¥n";
}
print "終了¥n";

上記では繰り返し処理の中で条件判断を行い、変数「$count」が「2」と等しい時にはredo演算子が実行されます。redo演算子が実行されると繰り返し処理の最初の位置まで戻り改めて繰り返し処理が行われます。この時、次の繰り返しに進むのではなく同じ繰り返しを改めて開始することになりますので繰り返しを続行するかどうかの条件判断は行いません。

redo演算子の場合も対象となる繰り返し処理というのは、while文、until文、for文、foreach文の他に裸のブロックが対象となります。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test9-1.pl

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

my $count = 0;

while ($count <= 5){
  #redo演算子が実行されるとこの位置に進む

  $count++;

  if ($count == 2){
    redo;
  }

  print "$count¥n";
}
print "終了¥n";

上記を「test9-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

redo演算子

今回の例では変数の値が「2」の時に改めて繰り返し処理の先頭に戻ります(先頭に戻って改めて変数に値に1が加算されます)。

( Written by Tatsuo Ikura )