2015-11-08 85 views
1

我正在试图增加一个字频率计数器,我把所有的STDIN和报告给STDOUT输入中出现的每个单词以及它出现了多少次。我添加了-i选项,并且在哈希之前将所有的字母都转换为小写字母。Perl字频率计数器

我遇到的问题是没有任何内容向STDOUT报告,也没有打印到命令控制台。它运行时没有产生或给出错误。

#!/usr/bin/perl 

use strict; 
use warnings; 

my @ARGV  = <STDIN>; 
my $filename = $ARGV[0]; 
my $word  = 0; 
my %freq  =(); 
my @wordarray; 

open(FILE, $filename); 

while (<STDIN>) { 

    if (scalar(@ARGV) > 1) { 

     if ($ARGV[1] eq "-i") { 

      my $string = $_; 
      $string =~ tr/A-Z/a-z/; 
      tr/A-Za-z/ /cs; 
      my @wordarray = (split(' ', lc $string)); 

      foreach my $word (@wordarray) { 
       $freq{$word}++; 
      } 
     } 
    } 

    if (scalar(@ARGV) < 2) { 

     my $string = $_; 
     tr/A-Za-z/ /cs; 
     my @wordarray = (split(' ', $string)); 

     foreach my $word (@wordarray) { 
      $freq{$word}++; 
     } 
    } 
} 

foreach $word (sort keys %freq) { 
    print "$word $freq{$word}\n"; 
} 

close(FILE); 
+1

请使用帮助了解如何格式化代码。 – Gene

+0

您确实需要了解如何布置代码以使其清晰易读,并使用Stack Overflow的* markdown *将代码区分为代码。您不应该在语句之间留下空行来阻止它们进行包装。这次我为你做了,但请做一些阅读 – Borodin

回答

0

的主要问题是此行

my @ARGV  = <STDIN>; 

它定义了一个词汇阵列@ARGV是无关的内置全局变量。而你可能根本不应该从所有

除了读入从标准输入,目前尚不清楚你希望你的程序的行为,所以我不能提供更详细的咨询