Scott E Robinson wrote: > > Thanks, Rob and Mark, but I'm pretty sure I'm trying to do something a > little different from a count hash. Each token in the candidate string > needs to be compared separately to all the target strings, and then count > the number of matches. So take any token out of the first string -- > :M260: for example -- and count its matches against one of the target > strings, like :L520:M260:C000:S000:L200:14:E214:. I don't think a count > hash does that?? > > A sample candidate string: :B000:W000:M260:8: > For each colon-delimited substring, such as :M260:, I want a count of how > many times it's found in each target string. > > Some sample target strings: > > :L520:T400:C000:S000:L200:8: <-bare numbers are possible, like > this :8: > :L520:T400:C000:S000:L200:8: > :L520:T400:C000:S000:L200:24:E214: > :L520:T400:C000:S000:M:24:E214: <-note the :M: string, just for > variety > :L520:T400:C000:S000:L200:14:E214: > :L520:T400:C000:S000:L200:14:E214: > :L520:M260:C000:S000:L200:14:E214: <-this should match once > :L520:T400:M260:S000:M260:14:E214: <-this should match twice > :L520:T400:C000:S000:L200:14:E214:
You probably want something like this: my $candidate = ':B000:W000:M260:8:'; my %count = map { $_ => 0 } $candidate =~ /[^:]+/g; while ( <DATA> ) { for ( /[^:]+/g ) { $count{$_}++ if exists $count{$_}; } } print "$_: $count{$_}\n" for keys %count; __DATA__ :L520:T400:C000:S000:L200:8: :L520:T400:C000:S000:L200:8: :L520:T400:C000:S000:L200:24:E214: :L520:T400:C000:S000:M:24:E214: :L520:T400:C000:S000:L200:14:E214: :L520:T400:C000:S000:L200:14:E214: :L520:M260:C000:S000:L200:14:E214: :L520:T400:M260:S000:M260:14:E214: :L520:T400:C000:S000:L200:14:E214: John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]