小ネタ:関数ブロックでnext使うと悲しい事になる

| コメント(0) | トラックバック(0)
追記:わかりにくかったらしいので若干コードと説明を変えてみた

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を使ってね!

Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ