シンボルテーブルと型グロブ
なんとなくは理解していたけど、さらに理解を深めるためにコードを書いてみる。
use strict; our $foo = "This is foo."; sub foo { print $foo, "\n"; } our $bar = "This is bar."; sub bar { print $bar, "\n"; } print "1.----\n"; #型グロブ *hoge = *foo; print ${*hoge},"\n"; &{*hoge}; print "2.----\n"; #シンボルテーブル(keyはシンボル識別子、valueは型グロブ) *hoge = $::{bar}; print ${*hoge},"\n"; &{*hoge}; #型グロブをourやmy宣言は無理(当たり前か) #our *piyo; #my *piyo; print "3.----\n"; #特定の型の変数やサブルーチンのみエイリアス our $piyo = "This is piyo."; *piyo = \&foo; print ${*piyo},"\n"; #This is piyo. &{*piyo}; #This is foo. print "4.----\n"; #localは宣言可能 { local *piyo = *bar; { print ${*piyo},"\n"; #This is bar. &{*piyo}; #This is bar. } } print "5.----\n"; print ${*piyo},"\n"; #This is piyo. &{*piyo}; #This is foo.
実行結果
1.----
This is foo.
This is foo.
2.----
This is bar.
This is bar.
3.----
This is piyo.
This is foo.
4.----
This is bar.
This is bar.
5.----
This is piyo.
This is foo.