2013-10-21 57 views
2

好吧,首先,這裏是我的代碼:如何只計算只包含A-Z和a-z的單詞?

#!/usr/bin/perl 

use open qw(:utf8 :std); 

use utf8; 

print "Which file do you want to search?\n"; 

$file = <>; 

if ($file =~ /^\s*$/) { 
    $file = "test.txt"; 
} 

open (FILE, $file) or die("Could not open file."); 

%hash; 

while (<FILE>) { 
    $hash{$_}++ for split /\W+/; 
} 

$count = 0; 

for (sort { 
     $hash{$b} <=> $hash{$a} 
        || 
      lc($a) cmp lc($b) 
        || 
       $a cmp $b 
    } keys %hash) 

{ 
    next unless /\w/; 
    printf "%-20s %5d\n", $_, $hash{$_} if ($count <= 9); 
    $count++; 
} 

我只想計算只包含A-Z和A-Z的話,但這些代碼也算數字。我必須做什麼?

這是輸出的一個例子:

Car      18 
5      11 
Test     11 
Task     10 
Perl      7 
School     6 
Hi      5 
Tired     5 
Word      4 
bye      3 

正如你可以看到,5號被列入這是不應該發生的。

謝謝!

+0

謝謝!是的,我的意思是隻包含字母的詞:P寫了幾個小時的代碼後,有點累了。我是perl的新手,所以每一個小問題都需要閱讀書籍和論壇.-'' – Timmy

回答

9
++$hash{$_} for grep /^[a-zA-Z]+\z/, split /\W+/; 

當然,你可能是指只包含字母的單詞。

++$hash{$_} for grep /^\pL+\z/, split /\W+/; 
+0

爲什麼不'split split/\ Pl + /'? –

+0

@Patrick J. S.,不等同。如果OP的代碼沒有,那麼會認爲'abc123 def'是一個單詞 – ikegami

+0

噢,是的。謝謝。 –

相關問題