追記:わかりにくかったらしいので若干コードと説明を変えてみた
use strict; sub foo { my $n = shift; warn $n; next if $n > 5; } foreach my $x ( 1..10 ) { foo( $x ); warn "after foo"; }
これで嵌った。問題は当然 "next"。ループの中で呼ばれるfooの中で"next"を使ってるので"after foo"は5回しか表示されないのだ。
理由が分かってみればなるほど、だったけど、これはしばらく嵌った。ちなみにuse warningsしてると
"Exiting subroutine via next"
っていう警告がでるよ!良い子はnextの変わりにreturnを使ってね!
"Exiting subroutine via next"
っていう警告がでるよ!良い子はnextの変わりにreturnを使ってね!
コメント