in reply to Newbie Q:How do I compare items within a string?

If you want the original text, marked up to show words that appear more than once:
use strict; use warnings; my %c; $_ = join '', <DATA>; $c{lc($1)}++ while m/([a-zA-Z]+(?:'[a-zA-Z]+)?)/g; s/([a-zA-Z]+(?:'[a-zA-Z]+)?)/$1 . ($c{lc($1)} > 1 ? "[$c{lc($1)}]" : ' +')/eg; print; __DATA__ I need to know how to compare items within a string... I have dropped +a textfile into an array, but now I need to check whether words in th +at text are repeated throughout. I have split the text; as I only wan +t the text to be manipulated. Maybe it's better to split it like this +; So anyway, I basically need to check now across my string whether a +ny elements in my string are repeated, and if so, how many times. I'v +e read alot about manipulating arrays, but they're all based on array +s that you create yourself, rather than arrays created by opening a t +extfile, so I'm not sure how to manipulate my array. Any help would b +e much appreciated.
If you just want a list of all the words that appear more than once, in order of first appearance:
use strict; use warnings; my (%c, @w); $_ = lc join '', <DATA>; while (m/([a-z]+(?:'[a-z]+)?)/g) { push @w, $1 if !$c{$1}++; } for (@w) { print "$_ : $c{$_}\n" if $c{$_} > 1; }

Replies are listed 'Best First'.
Re^2: Newbie Q:How do I compare items within a string?
by PerlGrrl (Sexton) on May 09, 2006 at 03:31 UTC
    Ted Pride,
    Hi. I've found that your suggested solution has given me the exact output that I was after. Just had to make a minor tweak so it would recognise all words, and output in the format I was after...Thanks so much to everyone for their help.