in reply to Re^2: Sorting Unique
in thread Sorting Unique

# 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>

Replies are listed 'Best First'.
Re^4: Sorting Unique
by rolandomantilla (Novice) on Aug 19, 2011 at 04:24 UTC
    Ok but what I needed what the count of the unique words, not the actual unique words. By the way thanks all you perlmonks you guys are helping me big time

      Fair enough.

      You could go with

      while ( my ($word,$count) = each %u_wc) { print "$word: $count\n" }

      Or you could go with print "$_: $u_wc{$_}\n" for keys %u_wc;. And there are many other ways but these will suffice.