用 Perl 计算文本文件中每个单词的出现次数

Count the occurence of each word in a text file by Perl

我想使用 Perl 计算文本文件中每个单词的出现次数。这是脚本:

#! /usr/local/bin/perl -w
#Exercice 8

#Ouvrir le fichier
open my($file), '<', 'file.txt' 
or die "Erreur lors de l'ouverture";

#Afficher le fichier  
while( my $line = <$file> ) {
        chomp($line) ;
        print "$line \n";
}

#Calculer le nombre d'apparaition
while( my $line = <$file> ){
foreach $word (split(' ',$line)){
    $freq{$word}++;
}
}

#Afficher les mots en ordre
foreach $word (sort keys %freq) {
print "$word $freq{$word}\n";
}

当我 运行 脚本时,我只得到第一个循环的结果。 其他两个没有return任何输出。

在您的第一个循环中,您通过 <> 运算符读取了文件的所有行,这意味着您实质上将文件指针推进到文件末尾。

在第二个循环中,您再次使用 <> 运算符,但无济于事 - 您在上一个循环中已经消耗了整个文件,因此没有其他内容可读。 %freq 因此在您的最终循环中未初始化。

我建议合并循环 1 和循环 2,如下所示:

while ( my $line = <$file> ) {
     chomp($line);
     print $line; 
     foreach $word (split(' ', $line)) {
         $freq{$word}++;
     }
}