|
发表于 2004-4-13 01:25:02
|
显示全部楼层
- #!/usr/bin/perl -w
- while ($inputline = <STDIN> ) { [color=red]# 从标准输入取一行[/color]
- while ($inputline =~ /\b[A-Z]\S+/g) { [color=red]# 遍历这一行的每一个大写字母开头的单词[/color]
- $word = $&; [color=red]# $word=匹配的单词[/color]
- $word =~ s/[;.,:-]$//; # remove punctuation
- for ($count = 1; $count <= @wordlist;$count++) { [color=red]# 遍历@wordlist[/color]
- $found = 0;
- if ($wordlist[$count-1] eq $word) { [color=red]# 如果@wordlist里有$word[/color]
- $found = 1;
- $wordcount[$count-1] += 1; [color=red]# @wordcount的相应项加1[/color]
- last;
- }
- }
- if ($found == 0) { [color=red]# 如果@wordlist里没有$word[/color]
- $oldlength = @wordlist;
- $wordlist[$oldlength] = $word; [color=red]# 将$word加到@wordlist的最后[/color]
- $wordcount[$oldlength] = 1; [color=red]# 将@wordcount的相应项置1[/color]
- }
- }
- }
- print ("Capitalized words and number of occurrences:\n");
- for ($count = 1; $count <= @wordlist; $count++) { [color=red]# 打印所有的单词[/color]
- print ("$wordlist[$count-1]: $wordcount[$count-1]\n");
- }
复制代码
@wordlist 保存单词列表
@wordcount 保存单词出现的次数(和@wordlist对应)
主要是程序里的@wordlist、@wordcount、$word、$found之类的变量都没有声明,一开始看有点晕,不过程序的流程倒是挺简单的,可以说就程序的算法来说直观的一蹋胡涂
另外,这个程序循环的时候老是从1开始,总让人觉得不爽,$found应该初始化一下,要不然会有一个警告(-w的时候) |
|