Count all occurrences of characters from a given set in a string.
In the code below $CharSet is the set of characters to count. $SearchStr is the string to count them in.
my $Set = qr/[^$CharSet]/; length join "", split $Set, $SearchStr;
Wrapped up in a rather more general sub:
sub CountSetChars { my $Count; my $CharSet = shift; my $Set = qr/[^$CharSet]/; my $Param; while ($Param = shift) { if (defined @$Param) {map {$Count += CountSetChars ($CharSet, $_)} @$Param;} elsif (ref $Param) {$Count += length join "", split $Set, @$Param;} else {$Count += length join "", split $Set, $Param;} } return $Count; }
There's a very pretty way to count them with the tr// operator, my $vowel_count = tr/AEIOUYaeiouy//; If you want the character list in a variable, you need to string-eval: my $foo_count = eval "tr/$foo//";
After Compline,Zaxo
Ceramics Glass Wood Metal Plastic Paper Banana leaves Something else
Results (398 votes), past polls