• ベストアンサー

こういった文法構造はありうるの?

# サブルーチンの宣言と定義 sub func { .... } # ここからすぐ下に { がくる { ....(仮にここをA部とします) } このように、サブルーチンの直後に、{ で始まるのは、文法上ありうるのでしょうか? CGIの中の一部です。 ちなみに、localで -wc とかつけて確認するとエラーにはなりません。 この場合、サブルーチン直後のA部は、どのようにプログラムが走るものなのでしょうか。 A部で、サブルーチンを呼んでもいません。 上手く説明できませんが、よろしくお願いします。

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

  • ベストアンサー
  • kapura
  • ベストアンサー率50% (48/95)
回答No.2

”一回だけ実行されるループと同じである”と答えられているように、名無しのブロック (A部) の代わりにwhile (ほげ) { ほげほげ } などと他のブロックを書いたのとで実行順序は変わらないでしょう。つまりサブルーチンとは直接的な関係はなくて、ふつうに上から順番にコードは実行される。 my $where = "outside"; print "command1: ", $where, "\n"; { my $where = "inside"; print "command2: ", $where, "\n"; } print "command3: ", $where, "\n";

demoe
質問者

お礼

回答ありがとうございます。 わかりやすい例文を示していただきありがとうございました。 > ふつうに上から順番にコードは実行される ANo.1 SAYKAからの回答いただいたあと、上から順に実行されるんじゃないか、とは思ってはいたのですが、制御ブロックとして{ }でくくる意味があるのかなぁ、ってところで行き詰まってました。 上から順番に来て1回実行するなら{ }でくくる意味無いじゃん。と。 だいぶ頭の中がすっきりしてきました。 ブロックにする意味があることも納得できました。 もう一度、全体を眺めなおしてみたいと思います。

その他の回答 (2)

  • elbend
  • ベストアンサー率50% (7/14)
回答No.3

# サブルーチンの宣言と定義 sub func {   my $hoge = "1";   print "hoge: ", $hoge, "\n"; } my $hoge = "2"; print "hoge: ", $hoge, "\n"; {   my $hoge = "3";   print "hoge: ", $hoge, "\n";   $hoge = "4"; } print "hoge: ", $hoge, "\n"; &func; exit; ----------------------------------------- 結果 hoge: 2 hoge: 3 hoge: 2 hoge: 1 サブルーチンとは関係ないです。

demoe
質問者

お礼

回答ありがとうございました。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

http://flex.ee.uec.ac.jp/texi/perl/perl_13.html ラベル無しの制御ブロックだと思うよ?

demoe
質問者

お礼

早速、回答ありがとうございます。 ”一回だけ実行されるループと同じである” ってことはなんとなくわかりましたが、このブロックはサブルーチンの直後に実行されるのでしょうか? サブルーチン内の処理が終わったら、サブルーチンを呼び出したところに帰ってしまうものと理解しています。とすると、いつこのブロックが実行されるのかが良くわかりません。 もし、まだみてみえるようなら教えていただければ、助かります。

関連するQ&A