免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3152 | 回复: 4
打印 上一主题 下一主题

关于引用和typeglob比较晕的事情 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-24 17:04 |只看该作者 |倒序浏览
PS:我现在还不知道typeglob用中文怎么说,只是模糊的理解了他的意思,
类型簇??
看perl高级编程,改编了下面的一段代码,
如果我用
DoubleEachEntry(*array,*ppp);
如我所愿,array和ppp都改了,
我用
DoubleEachEntry(*array,\@ppp);
结果array和ppp都指向了修改后的 ppp,
我想是不是当引用赋值给typeglob时就把typeglob相应的项给改了?
比如我给他赋的数组的引用,它的数组项就改了?
请明白的大虾指点.谢谢。



  1. #!/usr/bin/perl -w

  2. @array = (10,20);
  3. @ppp = ("dfdf","fgfg","aaa");
  4. DoubleEachEntry(*array,\@ppp);
  5. #DoubleEachEntry(*array,*ppp);
  6. print "@array \n";
  7. print "@ppp \n";


  8. sub DoubleEachEntry {
  9.     # $_[0] contains *array

  10.     local *copy = shift;
  11.     foreach $element (@copy) {
  12.         $element *= 2;
  13.    }

  14.    *copy = shift;
  15.      
  16.    foreach $element (@copy) {

  17.         $element x=2;
  18.     }


  19. }
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-08-25 14:07 |只看该作者

关于引用和typeglob比较晕的事情

type glob是一个很有趣的东西...
是一个ref指向HASH OF PACKAGE的变量..因为* 所以他可以表示
任意型态 $ (var) , & (function) , @(array),%(Hash)都可以...
只要名称相同..他都可以表示..(注意只能是global或local)
my的不行...
你的例子....跟指针有关系..
copy 一开始只是一个指针...指向nothing ....第一次array进来了...
copy指向了array--array指向了array(因为用@),所以copy也指向了array
第二个ref to array传进来了...所以copy又改指向\@ppp,但是同时间
*array也改指向到\@ppp....注意喔...pointer关系..(应该是
copy与array在这个时候指向了同一块memory,而这块memory指向了 @array...
但是当你用\@ppp的时候,会去改变这块memory...使得
copy,array,ppp都变成指向\@ppp...所以才会得到上面那种怪结果...
有点像这样..
array -->; memory 1 --->; array
第一次呼叫shift
copy 与array -->; memory 1-->; array
然後第二次呼叫shift,改变了memory中指向的位置..造成
array,copy,ppp都指向同一个地方@ppp...
注意看看advance perl programming有讲这些东西..
有错请指正...

所以啦建议你...少用type glob..
就比较不会发生这种怪现象..

论坛徽章:
0
3 [报告]
发表于 2005-08-25 18:53 |只看该作者

关于引用和typeglob比较晕的事情

明白了,谢谢apile大侠。

------------------------
爱生活,爱perl.
------------------------
哈哈哈...........

论坛徽章:
0
4 [报告]
发表于 2008-02-02 15:58 |只看该作者
太谢谢了!看了好久都没看懂typeglob这个表达法!真是比较晕!

论坛徽章:
0
5 [报告]
发表于 2008-02-02 16:02 |只看该作者
我看这个在C++中的对等物象是引用类型!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP