武钢黄浩东图片:哪位大侠帮偶解释一个perl程序

来源:百度文库 编辑:高校问答 时间:2024/05/02 21:46:57
教材中的例子:哪位大侠帮偶解释一下
22: $lettercount{$a} <=> $lettercount{$b};
是什么意思!是返回关联数组的值吗?

下例从STDIN输入一个文件并输出五个出现频率最高的字母及出现次数。

1 : #!/usr/local/bin/perl
2 :
3 : while ($line = ) {
4 : $line =~ tr/A-Z/a-z/;
5 : $line =~ s/[^a-z]//g;
6 : @letters = split(//, $line);
7 : foreach $letter (@letters) {
8 : $lettercount{$letter} += 1;
9 : }
10: }
11:
12: $~ = "WRITEHEADER";
13: write;
14: $count = 0;
15: foreach $letter (reverse sort occurrences
16: (keys(%lettercount))) {
17: &write_letter($letter, $lettercount{$letter});
18: last if (++$count == 5);
19: }
20:
21: sub occurrences {
22: $lettercount{$a} <=> $lettercount{$b};
23: }
24: sub write_letter {
25: local($letter, $value) = @_;
26:
27: $~ = "WRITELETTER";
28: write;
29: }
30: format WRITEHEADER =
31: The five most frequently occurring letters are:
32: .
33: format WRITELETTER =
34: @: @<<<<<<
35: $letter, $value
36: .

运行结果如下:
$ program
This is a test file.
This test file contains some input.
The quick brown fox jumped over the lazy dog.
^D
The five most frequently occurring letters are:
t: 10
e: 9
i: 8
s: 7
o: 6
还是不太明白:
<=> 是 整数比较操作符 吗?返回 1, 0, or -1
函数occurrences 的返回是什么?
参数 keys(%lettercount) 是怎么带入函数occurrences 中的?

1)
<=> 比较,返回 1, 0, or -1
操作符<=>结果为:
0 - 两个值相等
1 - 第一个值大
-1 - 第二个值大

2)函数occurrences,在这里并不是返回什么,这是sort 的一个特殊的用法,occurrences 是充当 sort 的表达式,就是 sort {$a <=> $b} @array
就是把@array从大到小排列。

3)参数 keys(%lettercount) 是怎么带入函数occurrences 中的?
正如 回答(2)中的 keys(%lettercount) 由 sort 函数 带入 occurrences

此程序目的是输出"This is a test file.
This test file contains some input.
The quick brown fox jumped over the lazy dog."中出现次数排在前五位的字母及其个数.
而你所问的问题是"22: $lettercount{$a} <=> $lettercount{$b};"它的作用是可以使扫描器同时扫描两个或者两个以上字母.这样才会同时扫描并计算多个字母的个数.如果没有那一段就需要增加循环和循环条件.