他言語、特にオーソドックスなcobol,c,java,vb等の人がPerlをやり始めると謎だらけで悩むことになりますね。
そんな人のために、僭越ながら私が謎を解き明かしていきますよ! Perlerの方は温かく見守ってくださいね(^o^)
◆変数等の頭文字って何を意味するの?
Perlをやり始めると変数等の頭文字($,@,%,&,*,何も無し)が気になります。
『$』が付くシンボルは、スカラー変数で、数値や文字列など何でも入る・・・VBで言えば、variant型のような変数です。
『$』はScalarの『S』に似ているので、スカラー変数を表します。
『@』が付くシンボルは、配列変数で、配列の要素はスカラー変数と同じで、何でも入る。
『@』はarrayの『a』に似ているので、配列変数を表します。
『%』が付くシンボルは、ハッシュ変数で、ハッシュはkeyとvalueを対で持っていて、valueはスカラー変数と同じで、何でも入る。
『%』はkeyとvalueの対を表していて、ハッシュ変数を表します。
『&』が付くシンボルは、サブルーチンで、実は『&』を頭に付けるより、尾に『()』をつけてサブルーチンを明示する方が多いです。
『&』はSubの『S』に似ているので、サブルーチン(これは自信がない)を表します。
(モダンPerlでは、『&』は付けないとのことです。右を参照のこと『第124回 サブルーチンの頭に&は普通つけない』)
『*』が付くシンボルは、型グロブで、頭文字以外同名のシンボルすべてを表します。
『*』と言えば、ワイルドカードですね。
何もつかないシンボルは、ベアワードで、ファイルハンドル、引数のない組み込み関数、ヒアドキュメントの終端値、ラベル、単なる文字列などなど・・・。
◆ファニー文字
ちなみに、これらの頭文字のことをPerl では「ファニー文字(funny character)」とよんでいます。
実はファニー文字を使うことにより、将来使われるであろう予約語やキーワードとかぶることがありません。
他の言語では、かぶる可能性があり、かぶった時に過去の資産が使えなくなるのです。
つまり、Perlでは、ファニー文字を使うことにより、過去の資産が使えなくなることが無いのです。
◆サンプル
$hoge = 123; # スカラー変数 @hoge = (1, 2, 3); # 配列変数 %hoge = (a => 1, b => 2, c => 3); # ハッシュ変数 print "-----&hoge------------\n"; &hoge; # サブルーチン print "-----&foox(*hoge)------\n"; &foox(*hoge); sub hoge { print "$hoge", "\n"; # スカラー変数 print "$hoge[0]$hoge[1]$hoge[2]", "\n";# 配列変数 print "$hoge{a}$hoge{b}$hoge{c}", "\n";# ハッシュ変数 } sub foox { (*foo) = @_; print "$foo", "\n"; # スカラー変数 print "$foo[0]$foo[1]$foo[2]", "\n";# 配列変数 print "$foo{a}$foo{b}$foo{c}", "\n";# ハッシュ変数 print "-----&foo--------------\n"; &foo; # サブルーチン }