燈明日記 このページをアンテナに追加 RSSフィード

ごあいさつ

燈明日記へようこそ!!

燈明日記の主なテーマは、以下の通りです。

そして、燈明日記へ来られたのも『私』と『あなた』の何かのご縁です。なので、どうぞごゆっくりご覧下さい!


2009/6/17(水)

[] Perlの謎(その1):変数等の頭文字って何を意味するの?

他言語、特にオーソドックスな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;                               # サブルーチン
}

◆実行結果

C:\perltest>perl sysbol.pl
-----&hoge------------
123
123
123
-----&foo(*hoge)------
123
123
123
-----&foo--------------
123
123
123

上記サンプルは、型グロブと各変数の関係を示すため、すべてグローバル変数になっています。

しかし、モダンPerlではなるべくグローバル変数は使わず、myでローカル変数にして処理するのが推奨です。

また、サブルーチンの『&foo;』も『foo();』の記述の方が推奨です。


◆謎シリーズ(予告)

  • 謎(その2):比較先がない比較と代入文がない代入
  • 謎(その3):subのデフォルトリターン値
  • 謎(その4):コンテキストで意味が変わる関数
  • 謎(その5):構造体がないデータ構造
  • 謎(その6):foreach文がfor文に
  • 謎(その7):mマッチ演算子の区切り文字
  • 謎(その8):正規表現の記憶$1〜とは
  • 謎(その9):単独shift
  • 謎(その10):blessとは何か

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証