in reply to Re^2: using hash to find frequency count
in thread using hash to find frequency count

Changing
while(<>){ my @list = shift =~ /([a-xA-Z'\-]+)/g;
to
while(<>){ my @list = $_ =~ /([a-xA-Z'\-]+)/g;
gave me results now; could you explain a little what the match is doing to parse the lines?
C:\scripts>wordcount.pl alice.txt
distinct words: 2815
frequency of most common word: 1779
common word:

Replies are listed 'Best First'.
Re^4: using hash to find frequency count
by jjohhn (Scribe) on May 15, 2005 at 04:23 UTC
    The answer, not surprisingly, is "the".
    The match was the key, as ikegami said.
    I would greatly appreciate a hint about how it is producing an appropriate list of words to count. This improved approach does not appear to parse a string on delimiters, but to alter the value of $_.
Re^4: using hash to find frequency count
by ikegami (Patriarch) on May 15, 2005 at 13:44 UTC
    could you explain a little what the match is doing to parse the lines?

    It says: Match a "word", defined as a sequence of one or more letters, hyphens and apostrophes ([...]+). When you find that, return it (()). Repeat (/g). That definition of a word is rather primitve, and may need to be tweaked.

    use strict; my $maxcount; my $find; my $file; my %hash; my $count; while (<>) { while (/([a-zA-Z'\-]+)/g) { my $word = $1; $count = ++$hash{lc $word}; if ($count > $maxcount) { $find = $word; $maxcount = $count; } } } my $numwords = keys %hash; print "distinct words: $numwords\n"; print "frequency of most common word: $maxcount\n"; print "common word: $find"; __END__ output of perl script.pl script.pl ================================== distinct words: 25 frequency of most common word: 7 common word: my