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>;、特に良い考えではありません。これを一度にすべて1行で完全に処理できます。

#!/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 に答える