Entries

Perl の「裸のブロック」と next

今日 Perl で はまったこと。
foreach (1..5){
   {
     if ( $_ == 3 ){ next; }
   }
   print "$_\\n";
}

の結果は、1,2,4,5, ではなく 1,2,3,4,5 となる。

ラクダ本曰く
 「ブロックは、意味的には、1回だけ実行されるループと等価」
とのこと。知らなかった。

わたしは変数のスコープを狭くするために
{
   my $tmpbuf = &func($hoge);
   $tmpbuf =~ s/,//g;
   if ( $tmpbuf eq '' ){
     $flag = 1;
   }
}

などと裸のブロック (bare block) を多用するので、この仕様は嫌だなぁ。

ちなみに似たようなはまりやすい点として、perl では do { ... } while; 内での next・last・redo は効かない、というのがある。

ついでに言うと、C においては continue・break は裸のブロックに対して作用しない。
main(){
   int i;
   for (i=1 ; i<=5 ; i++ ){
     {
       if ( i==3 ){ continue; }
     }
     printf("%d\\n", i);
   }
}

の結果は 1,2,4,5 となる。
このエントリーをブックマークに追加 ブックマークに追加する
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://68user.blog27.fc2.com/tb.php/13-d8896a47

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

Author:68user
http://X68000.q-e-d.net/~68user/

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Powered By FC2ブログ

Powered By FC2ブログ
ブログやるならFC2ブログ