Perl中单词的打印频率

时间:2013-03-26 03:48:35

标签: perl

我是Perl的新手,我正在编写一个程序来显示用户输入和单词频率给出的单词。我相信我已经正确设置了所有功能我只是在显示单词及其频率时遇到问题(我相信它与我的哈希值有关)。 输入的一个例子是:你好你好,你好吗? 我希望它显示为:hello = 2 how = 1 = 2 you = 1

#!usr/bin/perl -w 
 use strict;
 my @User_Input = <STDIN>;
 chomp(@User_Input);

 my $Word;
 my $Word_Count = 0;
 my %Word_Hash;

foreach $Word (@User_Input)
{
        #body of loop

         my @lines = split(/\s+/, $Word);
         $Word_Count = scalar(@lines);

        if (exists($Word_Hash{$Word}))
        {
                keys(%Word_Hash);
                my @all_words = keys(%Word_Hash);

        }

}

2 个答案:

答案 0 :(得分:2)

当您不需要内存中的所有内容时,请避免使用文件,因此@User_Input = <STDIN>;不是特别好的主意。您可以一次完美地处理所有这一行:

#!/usr/bin/env perl
use strict;
use warnings;

my %words;

while (my $line = <>)
{
    foreach my $word (split /\s+/, $line)
    {
        $words{$word}++;
    }
}

foreach my $word (keys %words)
{
    print "$word: $words{$word}\n";
}

对数据进行排序有点琐碎,但可以完成。

答案 1 :(得分:1)

perl -lane '$X{$_}++ for(@F);END{for(keys %X){print $_." ".$X{$_}}}'

测试:

> echo "hello hello how are you you" | perl -lane '$X{$_}++ for(@F);END{for(keys %X){print $_." ".$X{$_}}}'
you 2
how 1
hello 2
are 1
>