下面一段程序的作用是把阿拉伯数字转为英文数字:
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 引用解引用 后最后结果是个什么类型再放一个相应的前缀符号。
阅读(1562) | 评论(0) | 转发(0) |