# As suggested by toolic above
use strict;
use warnings;
print "Please enter the file name you want the word count\n\n";
my $file= <STDIN>;
chomp $file;
# Lexical file handles (my $fh) are better than file globs.
# Also, three-argument open() is better than two-argument open().
open(my $fh, "<", $file) or die $!;
my %u_wc;
my $words = 0; # Don't forget to declare $word!
while (<$fh>){
my @words = split;
$words += @words;
$u_wc{$_}++ for @words;
}
# print ("The number of words in the file is $words\n\n");
# The parens are useless here, and also inconsistent with the print st
+atement
# that prompted us for a file name.
print "The number of words in the file is $words\n\n";
# print ("this are the unique words $u_wc\n\n");
# $u_wc isn't a variable. We do have %u_wc though.
print "These are the unique words: ", join(" ", keys %u_wc), "\n\n";
Output:
G:\abyss>perl x.pl
Please enter the file name you want the word count
x.pl
The number of words in the file is 150
These are the unique words: want you file that useless my print parens
+ statement
better $file= suggested also unique strict; $file; name words: warnin
+gs; "These
with and number of do += die is %u_wc 0; to have open(my $u_wc "The %
+u_wc), her
e, $!; <STDIN>; # "\n\n"; Lexical isn't $words\n\n"; $file) "<", $u_wc
+\n\n"); }
two-argument the variable. open() a = @words toolic ("The @words; or i
+n As split
; $u_wc{$_}++ name. $words\n\n"); $words for enter by prompted inconsi
+stent We w
ord declare %u_wc; The $fh) Don't $word! join(" are globs. forget word
+s keys ("t
his handles count\n\n"; use above us ", though. open(). than $fh, (<$f
+h>){ (my w
hile chomp Also, "Please three-argument
G:\abyss>
|