- 论坛徽章:
- 1
|
啪啪... 你不错喔...很有研究精神...
我不大管compile的内部运作,
也没有兴趣管那麽多....或许你该去问Larry本人...
就我的理解perl里面都是reference....也可以看成位址....
$a="aa" 实际是先存aa的位址...然後在某个地方有个hash会存一笔..
key=a value=address of "aa"; 还有type是SCALAR....
然後你可以透过$a取出来....@(ARRAY),%(HASH)同理....
但是如果address of "aa"存的内容跟@,%,$取值型态不同...
或许应该说找不到一个key是a且type是ARRAY或HASH的数据可以取用,
此时perl会给你一个null值....
address of aa所指向的memory,可以存的是另一个address of data....
例如:
aa->address of "aa" type : SCALAR-->"aa"
或
aa->address of 'address of "aa"' type : REF--->address of "aa" type:SCALAR -->"aa"
至於type glob...是个特例..他可以ref到各种变量包括filehandle,@,$,%..他只是一个reference到不定address(或类似pointer的东西)..
至於address里面放什麽数据...没有限制..也就是上面例子中..他可以动态reference到第一层address的地方...
你爱用什麽方式就用什麽方式取出来...只是取错型态了(@,$,%,filehandle)
perl就给你一个空的值...你如果前面用$glob他就会先指向hash里面key是$glob的位址..看看里面的数值....
从C pointer的角度去看这个问题...会比较容易理解...
建议你可以看看advance perl programming里面有段在写type glob的问题...

好啦..不想争辩啦!!
没事可以多画画图..习惯C的用法(pointer to pointer)..
然後再想一下如果你是Larry..你要作没有int,float,double这些型态的宣告
你要怎麽作?
然後再回头来看这个问题会比较容易..
[ 本帖最后由 apile 于 2005-12-6 14:56 编辑 ] |
|