#! perl -slw use strict; use Data::Dumper; sub rndStr{local $"=''; "@_[map{rand @_} 0 .. shift]"; } #!" my @lines; push @lines, "desc$_\tconid@{[int rand 10]}\t". rndStr(30, map chr, 32 ..255) for 1..100; my (%lineChars, %totalChars, %conIDs); for (@lines) { my ($descID, $conID, $string) = split /\t/; print "$descID, $conID, '$string'"; push @{$conIDs{$conID}}, $descID; my %nonASCII; $nonASCII{$1}++ while $string =~ m[([^\x01-\x7f])]cog; $lineChars{$descID} = [ keys %nonASCII ]; $totalChars{$_} += $nonASCII{$_} for keys %nonASCII; } print Dumper \%conIDs, \%totalChars, \%lineChars;