Database Manipulation
- Here's one way to do it:
# program 1: dbmopen(%WORDS,"words",0644); while (<>) { foreach $word (split(/\W+/)) { $WORDS{$word}++; } } dbmclose(%WORDS);
The first program (the writer) opens a DBM in the current directory called
words, creating files named words.dir and words.pag. Thewhileloop grabs each line using the diamond operator. This line is split apart using thesplitoperator, with a delimiter of/\W+/, meaning nonword characters. Each word is then counted into the DBM array, using theforeachstatement to step through the words.# program 2: dbmopen(%WORDS,"words",undef); foreach $word (sort { $WORDS{$b} <=> $WORDS{$a} } keys %WORDS) { print "$word $WORDS{$word}\n"; } dbmclose(%WORDS);The second program opens a DBM in the current directory called words. That complicated looking
foreachline does most of the dirty work. The value of$wordeach time through the loop will be the next element of a list. The list is the sorted keys from%WORDS, sorted by their values (the count) in descending order. For each word in the list, we print the word and the number of times the word has occurred.