ループ内のサブルーチン内から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.
おお、警告が出るものの、抜けられることは抜けられるのか。
…まあでも普通はしないな。