Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29020907
  • 博文数量: 101
  • 博客积分: 4011
  • 博客等级: 上校
  • 技术积分: 1150
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-18 10:37
个人简介

落魄青年,挨踢民工,已经转行

文章分类

全部博文(101)

文章存档

2008年(47)

2007年(54)

分类:

2007-12-12 16:29:23

下面一段程序的作用是把阿拉伯数字转为英文数字:
 
sub card{
  my %card_map;
  @card_map{1..9}=qw(one two three four five six seven eight nine);
  my $num = $_;
  if ($card_map{$num}){
      $card_map{$num}; #return value
  }else{
      $num; # return value
  }
}

while (<>){
   chomp;
   print "card of $_ is ",&card($_),"\n";
   }
 
有个问题,既又有 %card_map 又有 @card_map,上面的 列表变量 card_map到底是 数组(array)  还是 哈希(hash)?
 
其实还是 哈希,@card_map其实是一个哈希values列表的切片(slice),哈希值的列表是个数组,那么这个数组的切片仍然是个数组,因此用@符号。在perl中,用$,@,%这三个中哪一个做前缀不是看变量本身是什么类型,而是看此变量经过 1 数组查下标取值 2 哈希查表求值 3 引用解引用 后最后结果是个什么类型再放一个相应的前缀符号。
 
阅读(1536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~