マスタリングPerl (8章 シンボルテーブルと型グロブ)

  • my変数とlocal変数
    • my変数: スコープの外では、my変数の影響は及ばない。例えば、サブルーチンAの中でサブルーチンBを呼び出した場合、Aで定義したmy変数はBに影響しない。
    • local変数: スコープが残っている間は、値を保持する。例えば、サブルーチンAの中でサブルーチンBを呼び出した場合、Aで定義したlocal変数はBに影響する。
  • サブルーチン(スコープ)からグローバル(パッケージ)変数を参照する
    • 完全なパッケージ名を変数名に追加する。-> $main::global
    • our変数を使う。-> our $global
  • シンボルテーブル
    • パッケージのすべての型グロブからなるハッシュに似たデータ構造。シンボルテーブル名は、末尾に2つのコロンが付いたパッケージ名となる。
    • keys演算子で中身を見ることができる。
    • keys演算子では、定義済みの識別子リストを表示するため、識別子にどの変数が定義されているか知るには、シンボリックリファレンスを使用する。
    • 個々の識別子は、変数の型ごとへのポインタとなっている。型は、以下の種類がある。
      • SCALAR($)
      • ARRAY(@)
      • HASH(%)
      • CODE(&)
      • IO(ファイルハンドラ)
      • GLOB(*)
      • FORMAT
      • NAME
      • PACKAGE
    • 型グロブを別の型グロブに代入すると、変数のエイリアスが可能になる。下記コードのように、いずれかの変数を変更するともう一方の変数も変更される。
      • エイリアスは、型グロブ全体だけでなく、リファレンスを使用して部分的に代入することも可能。
#!/usr/bin/perl

$hoge = "hoge";
*fuga = *hoge;      # 型グロブ代入
print "$fuga\n";     # hoge
$fuga = "fuga";
print "$hoge\n";    # fuga