1

我是 Perl 的新手,我目前正在编写一个程序来显示用户输入给出的单词和单词的频率。我相信我已经正确设置了所有功能我只是无法显示单词及其频率(我相信这与我的哈希值有关)。输入的一个例子是:你好,你好吗。我希望它显示为: hello = 2 how = 1 are = 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);

        }

}
4

2 回答 2

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";
}

对数据进行排序有点复杂,但可以做到。

于 2013-03-26T04:14:38.753 回答
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
> 
于 2013-03-26T07:42:39.180 回答