运行结果为何是HASH(0x35ef8)?

运行结果为何是HASH(0x35ef8)?

程序如下:my %score={
  "barney"=>95,
  "fred"=>205,
  "dino"=>30,
  "bam-bamm"=>195
};
my @winners=sort by_score_and_name keys %score;
sub by_score_and_name{
  $score{$b}<=>$score{$a}
         or
  $a cmp $b;
}
print join "\n",@winners;
我在XP的MS-DOS下运行该程序,运行结果为:
HASH(0x35ef
不太明白为什么是这样一个结果!是什么意思啊?为什么无法得到预期的结果?谢谢同志们!
啦啦啦啦,为什么说我的帖子字数少,这样不少了吧?

QUOTE:
my %score=(
  "barney"=>95,
  "fred"=>205,
  "dino"=>30,
  "bam-bamm"=>195
);

应该是有不认识的字符,你这代码是copy的吧


QUOTE:
原帖由 poize 于 2007-9-3 20:18 发表
应该是有不认识的字符,你这代码是copy的吧

改成这样就可以了:
my %score=(
  "barney" => 95,
  "fred" => 205,
  "dino" => 30,
  "bam-bamm" => 195,
);
你用的是花括号,形成了hash的引用
对于引用我也不是很清除,你自己看看书吧


QUOTE:
原帖由 royalzhang 于 2007-9-3 18:15 发表
啦啦啦啦,为什么说我的帖子字数少,这样不少了吧?

其实royalzhang已经把这个问题回答了,但此君太懒(美德?) 了。。。

得具体说一下。。。。

初始化hash和array,用的是list---列表语境。。。列表语境用()括号产生。。。

所以有:

my @friends = ('sunny' , 'jason', 'amy', 'god');
my %num_of_friend = ('sunny' => 9, 'jason' => 3, 'amy' => 2, 'god' => 4);

如果你使用[]或者{}的话,会产生引用。。。一般引用时用scalar($)来存储的。。。

my $r_friends =['sunny' , 'jason', 'amy', 'god'];
my $r_num_of_friend = {'sunny' => 9, 'jason' => 3, 'amy' => 2, 'god' => 4};


my %num_of_friend = {'sunny' => 9, 'jason' => 3, 'amy' => 2, 'god' => 4};
等同于
my %num_of_friend = \('sunny' => 9, 'jason' => 3, 'amy' => 2, 'god' => 4);
                                    #引用




我恨细节
谢谢大家的帮助,小弟感激不尽!
尤其感谢UPPET老大的讲解.小弟认识perl不足两月,平时上班也没什么时间学它.<perl入门第四版>刚看完第13章,正接触进程管理一章.似乎没有看到引用这个概念啊!赶快去找点有关引用的资料看看,霍霍!
小弟向来懒惰!不过上面的程序可不是COPY的哦!关键是没有弄懂有"引用"一说,呵呵!
谢谢大家!


QUOTE:
原帖由 royalzhang 于 2007-9-3 18:15 发表
啦啦啦啦,为什么说我的帖子字数少,这样不少了吧?

其实royalzhang的回答的信息量还是不错的
不过不会帮你分析到底朝天而已