• ベストアンサー

入れ子ループで、外側のループ変数$_を、内側のループ内から使えるか??

入れ子ループで、外側のループ変数$_を、内側のループ内から使えるか?? ループ変数を指定しない場合、自動的に$_が使われますが、例えば、 BIG: for(0..9) { SML: for(0..9) { expr } } のようなステートメントを書いた場合、SMLループ内でBIGのループ変数$_を参照する手だてはあるのでしょうか? イメージ的には、 $BIG::_ とやれば、出来そうだと思ったのですがダメでした^^; ださいコードでスミマセン m(__)m;;

  • Perl
  • 回答数2
  • ありがとう数22

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

文に対するラベルは名前空間を作らないからダメ.

zyousuke
質問者

お礼

こんばんは! より断定的なダメとういうお言葉をありがとうございます! 文意外に対するラベルというものがあり、それを使えば可能である、というふうに回答文を深読みして、ちょっと調べました。 自分で調べた限りでは、とにかくダメという結論に至りました。 某書Perl用語集 ラベル項目の解説 プログラム中の他の場所から文を参照するために、その文につけたキーの一種。

その他の回答 (1)

  • taporu
  • ベストアンサー率44% (46/104)
回答No.1

$temp = $_; で他の変数に代入してしまえば?

zyousuke
質問者

お礼

こんばんは。 私は、よく、ひょっとしたら出来るかもしれないけど、たぶん無理だろうというような質問します。 すなわち、ウィザードの方々から、無理だというお言葉がいただきたいわけです。 そうして、もやもやした気持ちを、吹き飛ばしてから、代替コードの作成に着手するという方針をとっているわけです^^ 今回のご回答から察するに、内側のループから外側のループ変数$_は見られないと、受け取りました。 そうと分かれば$_は使用せず、新しい変数を宣言することにします。

関連するQ&A

  • 変数をループで扱うには??

    C言語を最近勉強し始めたばっかりの初心者ですが、教えてください。 for文を用いたループ処理を使って、以下のことをやりたい場合、打開策があれば教えてください。 理想としては、(下手な書き方であることは100も承知なのですが・・) int i1,i2,i3,・・・・,; (添え字のような雰囲気の)整数変数と、カウント用の変数(例えば int count;)を用意して、 for (count = 1 ;(略);count++)などとして、forのブロック内に『気持ちとしては』、 int(count) = (略) としたいのです。何というか、添え字(正確に言えば全く添え字ではないのですが)とループを同時に扱いたいのです。 この、「添え字のように扱う」という方法・技術があれば、教えてください。お願いします。 「そんな書きかたをせずにこうすれば・・・」っていうのはわかっているんですが、気分的にもスッキリしたいので、回答のほど、お願いします。

  • perl:ループのカウンタ変数の値を保持したい。

    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の値を保持できますでしょうか。 お詳しい方、宜しくお願い致します。 ※ネストがうまく表現できず、みずらくてスミマセン。

    • ベストアンサー
    • Perl
  • objective-cの多重ループbreak

    objective-cの多重forループの内側でbreakすると外のforまで抜けるようです。 では、内側のforだけ抜けて外側のforの中に戻るにはどう書けばいいのでしょうか? あと、この件について、c言語とobjective-cの文法の違いについて教えていただけるとうれしいです。

  • 入れ子になったfor文の初期化式について

    javascriptを勉強中の初心者です。 以下のスクリプトを見てください。 document.write("<p>"); outloop: for (var i = 1; i < 5; i++){ for (var j = 1; j < 5; j++){ document.write(i + " × " + j + " = " + (i * j) + "<br />"); if (i * j > 10){ break outloop; } } } document.write("</p>"); 5未満の数同士の乗算の結果を順に表示し 乗算の結果が10を超えたら外のループを抜けるというスクリプトです。 for文がこのように入れ子になっている場合、 内側のループが二週になるとjはまた初期化されて1になるのでしょうか? 手持ちの参考書にあるfor文の説明では『初期化式は初めの一回だけ実行される』とあります。 内側のループが二回目以降の時、参考書のいう『初めの一回』になると考えていいのでしょうか。 初歩的な質問で恐縮ですが、ご存知の方どうか教えてください。 よろしくお願いいたします。

  • for文の中の参照変数について

    以下のように、 for文(例えば、10回ループ)の中で参照変数を宣言した場合、 1回目のループが終わったタイミングで、cccという変数はメモリ上から削除されるのでしょうか? 削除されないとしたら一つのメソッド内で同じ変数名が繰り返し宣言されることになるので 毎回削除されているのだとは思いますが。。 -------------------- method() { for(AAA aaa : bbb){ CCC ccc= null; } } -------------------- 教えて下さい。

    • ベストアンサー
    • Java
  • 変数をループ内で変更しループ外でも参照したい

    変数をループ内で変更しループ外でも参照したい Linuxのシェルを作成している最中にちょっとした壁にぶつかりました。 元々は以下のような感じの処理でした。 (A)------------------ FLAG=false awk "(NR>=2){print}" ${FILE} | while read LINE_STR do if […]; then FLAG=true fi done -------------------- 状況によってFLAGの値を変更し、あとの処理で FLAGの値に応じて異なる処理を行ないます。 で、少し調べたところパイプすると別プロセスになるので云々と あったのでループの前の定義でも中でも「export FLAG」と 書いてみたのですがダメでした。そういうもんじゃないのかと。 元々は、最初の1行は読み飛ばしたいという要望を持っていたので このような記述だったのですが、少し不本意ですが、 読み込むファイルの1行目も処理対象に含めることにした上で 以下のような記述に変更したところ一応動きました。 (B)------------------ while read LINE_STR do FLAG=true done < ${FILE} -------------------- 対処療法として今はこのようなコードにしましたが完全ではありません。 今自分の知識の中で実現可能な方法だと以下のような感じです。 ・フラグファイルを使用する ・1行読み飛ばした一時ファイルを作成しそれを使う ・読み込むファイルの仕様を変更し1行目のヘッダを削除する ・(B)の方法で読み込み、ループ内でカウンタを持ち、最初だけ  continueする どれでも一応実現は可能ですが、エレガントではありません。 そこで質問することにしました。 以下のどちらかもしくはそれ以外で私の希望を実現する方法を 教えてください。よろしくお願いします ・パイプを使用したループでループ内で変更した変数の値を取得する方法  ※(シェルの制約で出来ないのであれば、その旨を知りたいです) ・パイプを使用せず、1行読み飛ばす方法 ※そもそも1行読み飛ばす方法で 「awk "(NR>=2){print}" ${FILE}」 と書いていますが、これは妥当でしょうか? よりよい記述があればあわせて教えてください。 よろしくお願いします。

  • javascriptのforループ中の変数について質問です。

    javascriptのforループ中の変数について質問です。 下記のようなコードを書きました。 function test(){ for (i = 0;i < 3;i++){ var msg = "msg"+i; setTimeout(function(){ alert(msg); },1000 * i); } } これを実行すると、1秒間隔で順番に"msg2"→"msg2"→"msg2"と表示されます。 しかし、期待する動作は1秒間隔で順番に"msg0"→"msg1"→"msg2"なのです。 この動作を実現するために、どのようにスクリプトを修正すればよいか、ご教授いただければ幸いです。

  • Forループの制御について

    VB 2005,Framework2.0を使用しています。 For文を使ったループについてお尋ねしたいことがあります。 For i As Integer = 0 To 10     ’処理 Next i とあったとします。 そうするとループ変数iが0から10になるまで連続してループを行うのですが、これをある条件の時に現在のループ変数から一つ飛ばして次のループからまた処理を行いたい場合どのようにすれば良いのでしょうか? 例えば0~10回中に、現在5回目で特定の条件が一致したときその次の6回目のループは飛ばして7回目のループから再開したいです。 ちなみにこの様に書いても0から10回必ずループされてしまいました。 Dim TEST(10) As Integer TEST(5) = 1 For i As Integer = 0 To 10 If TEST(i) = 1 Then i = i + 1 End If Next i

  • ループ変数の変更

    GUCIと申します。 ループ変数の変更は、元の値を変えてしまうのでしたっけ? 元を変えずに変更したい場合に、 my $data_tmp = $data; $data_tmp =~ s/^0+//; としないといけないなんて。 らくだ本読んでも解りませんでした。 どなたか、解説お願いします。 C:\>type T1.pl #!Perl use strict; my @data = qw(001 002 003); print "S1: data is @data\n"; for my $data (@data) { $data =~ s/^0+//; } print "S2: data is @data\n"; __END__ C:\>T1.pl S1: data is 001 002 003 S2: data is 1 2 3

    • ベストアンサー
    • Perl
  • 全ての変数を一気にリセットする方法はありますか?

    全ての変数を一気にリセットする方法はありますか? Sub test() Dim i As Integer Dim int1 As Integer Dim int2 As Integer int1 = 1 int2 = 2 For i = 1 To 100 'プロシージャー int1 = 0 'リセット int2 = 0 'リセット Next End Sub みたいなコードがあり、 ループが終わる度に変数をリセットしたい場合 int1 = 0 'リセット int2 = 0 'リセット のように一つ一つ変数に値を入れてリセットするしかないですか? 例のコードは二つしか変数が有りますが 実際100個くらいの変数が有る場合も、 一個一個リセットするしかないのでしょうか? 理想としては、VBAを中断したら全ての変数がリセットされますが それと同じようなコードが有れば、楽だなと思います。

専門家に質問してみよう