読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

ループ内のサブルーチン内からnext

Perl初級者のコードを見ていたら、ループ送りの next をループの中で呼んでいるサブルーチンの中でやっていた。

#!/usr/bin/env perl
use strict;
use warnings;

LOOP :
for my $i (1 .. 10) {
  add2($i);
  print "$i at LOOP.\n";
}

sub add2 {
  my $i = shift;
  next LOOP if $i % 2;
  print $i + 2, " at add2().\n";
}

__END__

えっっ、こんなことできるのか??、と思って実際に動かしてみた。

$ ./loop.pl
Exiting subroutine via next at ./loop.pl line 13.
4 at add2().
2 at LOOP.
Exiting subroutine via next at ./loop.pl line 13.
6 at add2().
4 at LOOP.
Exiting subroutine via next at ./loop.pl line 13.
8 at add2().
6 at LOOP.
Exiting subroutine via next at ./loop.pl line 13.
10 at add2().
8 at LOOP.
Exiting subroutine via next at ./loop.pl line 13.
12 at add2().
10 at LOOP.

おお、警告が出るものの、抜けられることは抜けられるのか。


…まあでも普通はしないな。