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