以下の内容はhttps://hakobe932.hatenablog.com/entry/20061211/1165843864より取得しました。


シンボルテーブルから型グロブを得る

myだとかourだとか言ってるうちに気になったので、ラクダ本を眺めつつパッケージのシンボルテーブルについて調べてみた。

パッケージ変数はパッケージ名に::をつけたハッシュ(= シンボルテーブル)に属している。そのハッシュのキーは識別子で、そのキーに対応する値は型グロブになっている。シンボルテーブルを実際に表示してみると。

use warnings;
use strict;
use Data::Dumper;

{
    package WinterGarden;
    our $d = 'nyo';
    our $u = 'yo';
    our $p = 'nyu';
}

print Dumper \%WinterGarden::;

実行結果:

$ perl symbol_table.pl 
$VAR1 = {
          'p' => *WinterGarden::p,
          'u' => *WinterGarden::u,
          'd' => *WinterGarden::d
        };

というようになって、確かにハッシュになっている。なので、

$WinterGarden::{p}

とすれば識別子(ここではp)に対応した型グロブを得ることができる。型グロブにはその識別子に関連づいた値がすべて入っている(よね?)。例えば、グロブである*pには$pと@pと%pと&pなんかが入ってる。つまりは、パッケージ変数にはシンボルテーブル経由でちゃんとアクセスできるってことになる。

たしかに、パッケージ変数はシンボルテーブルに属しているな。

このへんはOK。あと型グロブの詳細部分とレキシカル変数をPerlがどう扱ってるか明日しらべてみよう。




以上の内容はhttps://hakobe932.hatenablog.com/entry/20061211/1165843864より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14