Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

count subset of chars in a line

by GrandFather (Saint)
on Jun 22, 2005 at 03:36 UTC ( [id://468897]=CUFP: print w/replies, xml ) Need Help??

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; }

Replies are listed 'Best First'.
Re: count subset of chars in a line
by Zaxo (Archbishop) on Jun 22, 2005 at 03:49 UTC

    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

      Argh, I knew I'd seen a tidy way to do it somewhere. Sorting out the parameter handling for the sub was good exercise though :-).

      Perl is Huffman encoded by design.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: CUFP [id://468897]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (6)
As of 2024-04-23 11:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found