Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: This should be easy: counting letters in a string

by inman (Curate)
on Jan 31, 2006 at 11:36 UTC ( [id://526714]=note: print w/replies, xml ) Need Help??


in reply to This should be easy: counting letters in a string

The transliteration does not interpolate the variable as you expect in your sample. The following illustrates the use of eval.
use strict; use warnings; my @letters = qw (A B C D E F); my $string = "AFTYUBEWTWECRTUTYIYTDDDDRYJURTHJTREEEEEFGSDFF"; my $count; foreach my $a(@letters) { eval "\$count = \$string =~ tr/$a//"; print "$count\n"; }
You can also use a substitution in order to interpolate but avoid the eval.
$count = $string =~ s/$a//g;
Both methods change the string. A more flexible way to count the values would be to split the string and use a hash to store the values.
my %count; $count{$_}++ foreach split //, $string; print "$count{$_}\n" foreach (@letters);

Replies are listed 'Best First'.
Re^2: This should be easy: counting letters in a string
by Roy Johnson (Monsignor) on Jan 31, 2006 at 14:46 UTC
    Both methods change the string.
    No, tr/a// will not delete characters unless you specify the d modifier. Characters that are not replaced are left alone.

    And using a little trick to induce list context, you can use pattern matching to count the occurrences:

    my @letters = qw(A B C D E F); my $string = 'AFTYUBEWTWECRTUTYIYTDDDDRYJURTHJTREEEEEFGSDFF'; my @counts; for (0..$#letters) { $counts[$_] = () = $string =~ /$letters[$_]/g; } print "@counts\n";

    Caution: Contents may have been coded under pressure.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-04-25 16:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found