perl中的typeglob(三)
在前面几篇,已经详细的阐述了,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 就由于一个引用一般。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |