• 締切済み

use strictを用いた際のmy,our,local の使い分け

perl-5.6.1でuse strictを使っていますが、 あるループで定義した変数値を、その後にでてくるいくつかのループで 参照したい場合は、my,our,localのどれを用いればよいのでしょうか? 例えば、 for ( my $x=0; $x<$n; $x++) { my $b= $x*2+1; ??? @a[$x]=$b;  ← our? local? } と定義をし、その後幾つかのループで以下のように参照する場合です。 for (my $z=0; $z<$n; $z++) { if ($z == ($n-1)) { print $a[$z], "\n"; } else{ print $a[$z], "\t"; } } よろしくお願いいたします。

みんなの回答

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

そうそう, my や our は変数全体にしか適用できないので, 挙げられた例では「そこに入れる適切なものは存在しない」というのが正解のような気がします. あらかじめ my なり our なりで定義しておいた方が無難.

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

my はレキシカルスコープを持つ変数を作る. our はグローバル変数に対してレキシカルにアクセスする. local はグローバル変数 (の一部) に対し, 一時的に値を代入する.

kooru
質問者

お礼

お礼が遅くなってしまい、申し訳ありません。 ありがとうございます! myに関しての使い方はわかるのですが、our,localに関してはネットを検索してもいまいちよくわかっていませんでした。 まとめてくださって少しわかった気がします。 もしよろしければお時間のあるときに、our,localの使い分けがわかるようなプログラム例を簡単に教えていただければ幸いです。 よろしくお願いいたします。

  • mflow
  • ベストアンサー率63% (42/66)
回答No.1

最初にループの外で宣言しておくのでは何か不都合があるのでしょうか。 my @a; for ( my $x=0; $x<$n; $x++) { my $b= $x*2+1; $a[$x]=$b; }

kooru
質問者

お礼

みなさま、ありがとうございます。 本当は、配列変数名の中に変数をいれたものを、いくつか(数はデータによって異なる)ループを使って定義し、その変数を他のループ内で操作したいと考えていました。 (実際には、前の質問 QNo.2510402 で書かせていただいたとおり、 ループ x: 1-3 ループ y: 1-2 ${"answer$x"[$y]}=入力値 ←??    ループ閉 y ループ閉 x ----------------- と書き、理想は以下のように定義し、その後他のループでこれらの値を操作したいと思っていたのです・・・。 answer1[1] answer1[2] answer2[1] answer2[2] answer3[1] answer3[2] ) x の値の数は、用いるデータによってことなるので、ループの中でしか 定義できないと思っていたのですが・・・ perlに配列の配列があるということを教えていただき、配列を外で宣言することで解決しました! ありがとうございました!

関連するQ&A

専門家に質問してみよう