マスタリング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