为什么用Perl编写的单词频率计数器示例无法产生有用的输出?

Bra*_*esh 3 string perl comparison word-frequency

我是Perl的新手,我正在尝试写一个单词频率计数器作为学习练习.

但是,在我处理之后,我无法在下面的代码中找出错误.这是我的代码:

$wa = "A word frequency counter."; 
@wordArray = split("",$wa);
$num = length($wa);
$word = "";
$flag = 1; # 0 if previous character was an alphabet and 1 if it was a blank.
%wordCount = ("null" => 0);
if ($num == -1) {
    print "There are no words.\n";
} else {
    print "$length";
    for $i (0 .. $num) {
        if(($wordArray[$i]!=' ') && ($flag==1)) { # start of a new word.
            print "here";
            $word = $wordArray[$i];
            $flag = 0;
        } elsif ($wordArray[$i]!=' ' && $flag==0) { # continuation of a word.
            $word = $word . $wordArray[$i];
        } elsif ($wordArray[$i]==' '&& $flag==0) { # end of a word.
            $word = $word . $wordArray[$i];
            $flag = 1;
            $wordCount{$word}++;
            print "\nword: $word";
        } elsif ($wordArray[$i]==" " && $flag==1) { # series of blanks.
            # do nothing.
        }
    }
    for $i (keys %wordCount) {
        print " \nword: $i - count: $wordCount{$i} ";
    }
}
Run Code Online (Sandbox Code Playgroud)

它既不是"在这里"打印,也不是字.我并不担心此时的优化,尽管在这方面的任何输入也会受到高度赞赏.

Dav*_*oss 6

这是一个很好的例子,如果你只是向它寻求帮助,Perl会帮助你找出问题所在.习惯于总是添加行:

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

到你的Perl程序的顶部.