好的,首先,这是我的代码:
#!/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 :(得分:9)
++$hash{$_} for grep /^[a-zA-Z]+\z/, split /\W+/;
当然,你可能意味着只包含字母的单词。
++$hash{$_} for grep /^\pL+\z/, split /\W+/;