包的内容总体在一起称做符号表。
符号表都存储在一个散列里,这个散列的名字跟该包的名字相同,只是后面还要多加两个冒号。
main包符号表就是%main:: 。
Perl使用符号表来把标识符(比如$a,去掉前缀的'a'字符串就是标识符)映射到相应的值。但是散列表不允许重复键值,所以我们不可能使散列表中拥有相同名字的两个条目指向两个不同的值。
于是Perl在符号表和其他数据类型之间,放置了一个叫做typeglob的数据结构。
在符号表的散列里,每个键/值都把一个标识符和它的值匹配起来。键是符号标识符,而值是对应的tpyeglob。
*sym = $main::{"variable"}
这跟 *sym = *main::variable
的效果是几乎一样的
typeglob是一种可以在脚本程序中使用的真实的数据类型,它拥有前缀“*”。
typeglob是一组指向值的指针,其中每个指针对应一种值类型;而且tpyeglob本身可以看作一种散列,其中有不同类型的变量记录。
*sym = *main::variable
*sym{SCALAR} 和 /$sym 一样
*sym{ARRAY} 和 /@sym 一样
*sym{HASH}
*sym{GLOB}
*sym{NAME} 符号标识符来之哪个名字
*sym{PACKAGE} 符号标识符来之哪个包