in reply to promoting array to a hash
Now Zaxo has solved your original problem, but let me have a different question about your code.
Do you realize that grep /^[a-z]+$/, (split /\s/, join(" ",<>)) will return only those words that appear without punctation in the text? For example, if you input "hello, world" to that program, it will output only world, as split splits it to "hello," and "world" but /^[a-z]+$/ does not match the first one. If that's what you want, ok. If you want to match those words with punctation too, you should do something like
instead of the above grep. This makes the code look like this:grep /^[a-z]+$/, (join(" ",<>)=~/(\w+)/g)
or, more simply,print "$_\n" for sort keys %{{ map {$_, 1} grep /^[a-z]+$/, (join(" ",<>)=~/(\w+)/g) }};
print "$_\n" for sort keys %{{ map {$_, 1} join(" ",<>)=~/\b[a-z]+\b/g }};
Also, instead of eliminating the temp hash, one could use a temp hash but eliminate map, which is IMO more elegant. (Update: I now see this has been borught up before.)
my %hash; $hash{$_}++ for join(" ",<>)=~/\b[a-z]+\b/g; print "$_\n" for sort keys %hash;
|
|---|