求助:伪散列的一个小疑问【未解决,继续讨论】



QUOTE:
原帖由 zhuomingliang 于 2008-7-25 13:59 发表
那书不是叫你们不用手动去创建伪散列,最好用那个模块,怎么就不听呢?

有人说我们是要创建伪散列吗?

---------------后面的兄弟们继续讨论. 解答2个问题,#1和#2,别的都是后话了......谢谢!



QUOTE:
它只知道一个“技巧”:如何把一个散列解引用转变成一个数组解引用。在向伪散列里增加其他元素的时候,在你使用散列表示法之前,必须明确告诉下层的散列那些元素将放在哪里。
     ------ 参考 《perl 语言编程》8.3.5 伪散列

优先级的问题

print %$john->[0]{'weight'},"\n";        #1
看做是:
print [%$john]->[0]{'weight'},"\n";        #1


print $$john->[0]{'weight'}
看做是:
print [$$john]->[0]{'weight'}



为什么是这么看成的呢,下面的话很重要

QUOTE:
解引用的类型是由右操作数决定的,也就是,由直接跟在箭头后面的东西决定。如果箭头后面的东西是一个方括弧或者花括弧,那么左操作数就分别当作一个指向一个数组或者散列的引用,由右边的操作数做下标定位。如果箭头后面的东西是一个左圆括弧,那么左操作数就当作一个指向一个子过程的引用看待,然后用你在圆括弧右边提供的参数进行调用。
     ------ 参考 《per 语言编程》 8.3.3 使用箭头操作符

试着运行下面的代码:

#!/usr/bin/perl


print ['dc','3d','cc']->[2],"\n";

print [{'dc','3d','cc'},'dcd']->[0],"\n";
print [{'dc','3d','cc'},'dcd']->[0]{'dc'},"\n";
print [{'dc','3d','cc'},'dcd']->[1],"\n";


perl的伪散列用途广不? 应该有被废除的可能吧~`·
perl 5.8 和 perl 5.10对伪散列运行结果都不同啊!
你的问题解决了没?解决了就该改标题了。


QUOTE:
原帖由 zhuomingliang 于 2008-7-25 16:51 发表


优先级的问题

print %$john->[0]{'weight'},"\n";        #1
看做是:
print [%$john]->[0]{'weight'},"\n";        #1


print $$john->[0]{'weight'}
看做是:
print [$$john]->[0]{'weight'}
...

Active perl 5.10.0中运行错误。这个版本兼容问题如何解决?