プロが教える店舗&オフィスのセキュリティ対策術

While文のループのなかにfor文でループをまわしているスクリプトなのですが、
forの中でカウンタ変数をつくり、ループ回数を計測しております。
またforの中である条件を満たした際に、lastでforを抜け、引き続きWhileのループを継続するという処理をしております。

$i=0;
While(○○){
処理1
   for(××){
処理2
$i++;
     if($i >=100){
 処理3
      last;
}
}
}

ここで、一度for文のif文で一度forループを抜け、Whileでループをし、またforループに突入した際に、前回forループでカウントした$iの値を保持したまま、そのつづきから$iのカウンタを動作させたいのですが、$iの値はforループを抜けるとリセットしてしまいます。

このような場合、どうすれば$iの値を保持できますでしょうか。
お詳しい方、宜しくお願い致します。

※ネストがうまく表現できず、みずらくてスミマセン。

質問者からの補足コメント

  • 失礼いたしました。
    if文の条件式の”$i >=100”は無視して、”ある条件を満たしたとき”に置き換えていただけますでしょうか。
    whileループ→forループ→if文→whileループ→forループ→if文→・・・
    を繰り返す処理になります。
    その度に、$iの値を保持し、次回はその値の続きからカウントしたいです。

      補足日時:2015/04/14 18:41

A 回答 (2件)

Perlのfor(式1 ; 式2; 式3 ) の 式1 ; 式2; 式3 いずれかを省略することができます。


また、
for(式1 ; 式2; 式3 ) { 処理 }

式1;
while(式2) {
処理
式3
}
と(ほぼ)同じです。


これらを考えて、変数が初期化されないようにすればいいのではないでしょうか。


> $iの値はforループを抜けるとリセットしてしまいます。

for文を抜けても、変数の値は保持されます。
リセットされるのは、リセットするようにプログラムに書いてあるからです。
for(××){
って省略してありますけど、ここで for($i=0;〜) ってやってませんか?
    • good
    • 0
この回答へのお礼

ご指摘の通り、他のところの記述が間違っておりました。。
ご回答ありがとうございます!

お礼日時:2015/04/15 12:51

追記です。



forループは途中で抜けないとダメなんですか?

$i=0;
my $firstTime=1;
While(○○){
 for(××){
  if( $firstTime ) {
   処理1 ;
   $firstTime=0 ;
  }
  処理2
  $i++;
  if(条件を満す) {
   処理3
   $firstTime=0 ;
  }
 }
}

とか

$i=0;
While(○○){
 処理1 ;
 for(××){
  処理2
  $i++;
  if(条件を満す) {
   処理3
   処理1 ;
  }
 }
}

とか、last を使わない方法があるのでは?
処理の内容次第では、もっとシンプルに書けるかもしれません。
    • good
    • 0
この回答へのお礼

ログの表示で、例えばログファイルのログを1000行読み込む毎に表示、最終的に1万行読み込む、といった処理をするためlastを使っています。
他の記述ができないか、考えてみます。
ありがとうございます!

お礼日時:2015/04/15 12:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!