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

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

PS:我现在还不知道typeglob用中文怎么说,只是模糊的理解了他的意思,
类型簇??
看perl高级编程,改编了下面的一段代码,
如果我用
DoubleEachEntry(*array,*ppp);
如我所愿,array和ppp都改了,
我用
DoubleEachEntry(*array,\@ppp);
结果array和ppp都指向了修改后的 ppp,
我想是不是当引用赋值给typeglob时就把typeglob相应的项给改了?
比如我给他赋的数组的引用,它的数组项就改了?
请明白的大虾指点.谢谢。

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

@array = (10,20);
@ppp = ("dfdf","fgfg","aaa");
DoubleEachEntry(*array,\@ppp);
#DoubleEachEntry(*array,*ppp);
print "@array \n";
print "@ppp \n";


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

    local *copy = shift;
    foreach $element (@copy) {
        $element *= 2;
   }

   *copy = shift;
     
   foreach $element (@copy) {

        $element x=2;
    }


}

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..
就比较不会发生这种怪现象..
明白了,谢谢apile大侠。

------------------------
爱生活,爱perl.
------------------------
哈哈哈...........
太谢谢了!看了好久都没看懂typeglob这个表达法!真是比较晕!
我看这个在C++中的对等物象是引用类型!