Perlのdo〜while文(前編)
いわゆるC言語のそれとは違うらしいので、
手を動かして理解してみようと思う。
perlsyn – Perl の文法 – perldoc.jp
まず、このページの文修飾子を読む。
次に、ダメなコード。
use strict;
use warnings;
use v5.10;
my $i = 0;
do {
say "\$i = $i";
$i++;
last;
} while ($i < 10);
say "\$i = $i";
これを実行すると、
$ perl bad.pl
$i = 0
Can't "last" outside a loop block at bad.pl line 10.
で、言われるがままに修正。
use strict;
use warnings;
use v5.10;
my $i = 0;
do {{
say "\$i = $i";
$i++;
last;
}} while ($i < 10);
say "\$i = $i";
今度はどうでしょう?
$ perl aaa.pl
$i = 0
$i = 1
$i = 2
$i = 3
$i = 4
$i = 5
$i = 6
$i = 7
$i = 8
$i = 9
$i = 10
とりあえず、エラーはでなくなったけど、できればlastでループを抜けたいところ。
で、何が起きてるかというと、
lastによって内側の{...}を抜けて、
外側の{...}の先頭から実行されてるっぽい。
つまり、このコードは書いた通りに動いている。
続く。
Leave a Comment