在前面几篇,已经详细的阐述了,typeglob和符号表的关系。
typeglob 类似于一种一对多的hash结构。
且讲述了typeglob的用法,包括,别名,use 的import 机制,EXPORTER的原理,实现OO模块中的set/get,对应文件句柄的使用。
后来看完了exporter这一章,又有一点想法和测试,总结一些细节问题。
一 。符号表是一个hash,值是符号名,在当前包中使用,值是typeglob ;
例如 某一项是 ff =》 *main::ff
值 *main::ff 包含 array scalar hash glob format 等等
@{*ff} ${*ff} %{*ff} 可以访问相应的值 array scalar , 这里main是缺省了的。
把缺省补齐,会便于后面的理解。
二。.typeglob 是一种一对多的hash 结构
用*号进行访问,访问typeglob时 会先查找符号表,但是查找哪一个包的符号表和*号后面的串有关。
例如*ff 那么会查找当前包的符号表, *min::ff 那么查找min 包的符号表。
package m;
*ff= *tt;
那么m包的符号表中就添加 ff =》 *m::tt tt => *m::tt ;这个别名等同于引用,tt 中 对应的 array 修改了 , @{*ff} 的值也被修改
package m;
*{main::ff} =*tt
main包的符号表 添加 ff => *m::tt
即:glob会先匹配包名,没有包名,包名就是当前包, 并修改相应的符号表。
所以import机制,可以在其他包内,修改caller包的符号表。
三。typeglob的访问
{*name} 加上花括号,前面加上 &,@ $ 即可访问 ,*name 就由于一个引用一般。