我想使用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";
}
当我运行脚本时,我只得到第一个循环的结果。 其他两个人不会返回任何输出。
答案 0 :(得分:3)
在第一个循环中,您通过<>
运算符读取所有文件的行,这意味着您基本上将文件指针前进到文件的末尾。
在你的第二个循环中,你再次使用<>
运算符,但无济于事 - 你已经在前一个循环中使用了整个文件,所以没有别的东西可以读了。因此%freq
在最后一个循环中未初始化。
我建议合并循环1和2,如下所示:
while ( my $line = <$file> ) {
chomp($line);
print $line;
foreach $word (split(' ', $line)) {
$freq{$word}++;
}
}