- ベストアンサー
レキシカル変数について
レキシカル変数の書き方について質問なのですが、色々なスクリプトを見ると書き方が色々あり、違いが分かりません。 例) my $test=0; my($test)=0; my @test=(0,1,2,3,4,5); my(@test)=(0,1,2,3,4,5); 上記の場合、それぞれカッコがある場合とない場合の違いはあるのでしょうか? 参考になるサイトでも構いませんので、どなたかご存知の方教えていただけませんか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず perldoc は見るべし. スコープをおいておけば 1. $test = 0; 1'. ($test) = 0; とか 2. @test = (0, 1, 2, 3, 4, 5); 2'. (@test) = (0, 1, 2, 3, 4, 5); とかの違いを考えればよく, 下は全く同じです. 上の 2つは, 1 では左辺がスカラーなので右辺もスカラーコンテキストで評価されるのに対し 1' は左辺が配列であるため右辺も配列コンテキストで評価します. とはいえ, 今の場合は右辺をスカラーコンテキストで評価しても配列コンテキストで評価しても大差ない結果になります (逆にいうと「コンテキストによって結果が変わる式」を使うなら違う結果になる, ということでもある). 一方, my は「単項演算子」とみることができるため, my ($foo, $bar); と my $foo, $bar; とでは違う意味になります.
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
ここらへんとか: http://perldoc.perl.org/perldata.html#Context 要するに、コンテキストがsclarなのかlistなのかが係わっています。 レキシカル変数かどうかは、あまり関係ないという。 なので、今どういうコンテキストにあるのか、どういうコンテキストにしたいのかを意識してれば、自ずと書き方が分かるかと。 あるいは、そこを崩してでも求めるべきものがあるかどうかとか。
お礼
とても分かりやすい回答をいただきありがとうございます。 どちらも結果が同じなので、違いがよく分かっていませんでしたが、今後はより正確に利用できるかと思います。 ありがとうございました。