アプリ版:「スタンプのみでお礼する」機能のリリースについて

レキシカル変数の書き方について質問なのですが、色々なスクリプトを見ると書き方が色々あり、違いが分かりません。

例)
my $test=0;
my($test)=0;

my @test=(0,1,2,3,4,5);
my(@test)=(0,1,2,3,4,5);

上記の場合、それぞれカッコがある場合とない場合の違いはあるのでしょうか?

参考になるサイトでも構いませんので、どなたかご存知の方教えていただけませんか。

A 回答 (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;
とでは違う意味になります.
    • good
    • 0
この回答へのお礼

とても分かりやすい回答をいただきありがとうございます。
どちらも結果が同じなので、違いがよく分かっていませんでしたが、今後はより正確に利用できるかと思います。
ありがとうございました。

お礼日時:2012/06/27 13:39

ここらへんとか:


http://perldoc.perl.org/perldata.html#Context

要するに、コンテキストがsclarなのかlistなのかが係わっています。
レキシカル変数かどうかは、あまり関係ないという。

なので、今どういうコンテキストにあるのか、どういうコンテキストにしたいのかを意識してれば、自ずと書き方が分かるかと。
あるいは、そこを崩してでも求めるべきものがあるかどうかとか。
    • good
    • 0

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