LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 916|回复: 5

请问关于HASH的引用的问题

[复制链接]
发表于 2004-1-7 23:22:21 | 显示全部楼层 |阅读模式
下面一段代码有问题吗?为什么运行什么结果都没有。

%xxx = ("name" => "panjie", "sex" => "male");
push(@result1, \%xxx);
$name = $$result1[0]{"name"};
print "$name";
发表于 2004-1-8 15:24:35 | 显示全部楼层
兄弟想作什麼的?是不是這樣?
$xxx{"name"};
-------------------------
$name = sex;
print $xxx{$name}; <--- 這個很常用也很好用的
发表于 2004-1-9 06:23:48 | 显示全部楼层
#!/usr/bin/perl
%xxx = ("name" => "panjie", "sex" => "male");
push(@result1, \%xxx);
$name = $result1[0]->{"name"};
# 也可以用$name = $result1[0]{"name"};  
print "$name";

这样就行了,看看关于反引用(dereferencing)相关的内容吧
$result1[0]的值就是保存%xxx的数组的内存地址,这里是散列的引用
如果是$name = $$result1[0]->{"name"} 就是数组的引用了,然后再嵌入一个散列的引用
如果要用你的反引用表示方法的话,可以用

#!/usr/bin/perl
%xxx = ("name" => "panjie", "sex" => "male");
push(@result1, \%xxx);
$result2 = \@result1;
$name = $$result2[0]{"name"};
print "$name";
 楼主| 发表于 2004-1-9 21:59:55 | 显示全部楼层
如下代码是正确的:

%xxx = ("name" => "panjie", "sex" => "male");
$temp = \%xxx;
$temp2 = $$temp{"name"};

而我觉得$temp和$result1[0]是一样的,那为什么这个就要用两个$$,而上面一个就不需要呢?
发表于 2004-1-10 01:25:33 | 显示全部楼层
$$这个符号,其实不是一起的,前一个$的功能与->相同
%xxx = ("name" => "panjie", "sex" => "male");
$temp = \%xxx;
$temp2 = $temp->{"name"};
对于散列,第一个->是不可以省的,或者使用另外一种dereferencing的方法,就是使用$来引用

楼主钻研的比较透彻,假以时日,必定是高手呀:)
值得我学习
发表于 2004-1-10 02:41:02 | 显示全部楼层
最初由 tojeff 发表
$$这个符号,其实不是一起的,前一个$的功能与->相同
%xxx = ("name" => "panjie", "sex" => "male");
$temp = \%xxx;
$temp2 = $temp->{"name"};
对于散列,第一个->是不可以省的,或者使用另外一种dereferencing的方法,就是使用$来引用

楼主钻研的比较透彻,假以时日,必定是高手呀:)
值得我学习

兄弟解釋的這麼細緻真值得大家學習, 如果教書的可以如此那就好了~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表