2

さて、まず第一に、ここに私のコードがあります:

#!/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++;
}

AZ と az のみを含む単語のみをカウントしたいのですが、このコードは数字もカウントします。どうすればいいですか?

これは出力の例です:

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

ご覧のとおり、発生するはずのない番号 5 がリストされています。

ありがとう!

4

1 に答える 1

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

もちろん、おそらく文字のみを含む単語を意味していたでしょう。

++$hash{$_} for grep /^\pL+\z/, split /\W+/;
于 2013-10-21T02:55:48.343 に答える