Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

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

by inman (Curate)
on Jan 31, 2006 at 11:36 UTC ( #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);


Comment on Re: This should be easy: counting letters in a string
Select or Download Code
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
Node Status?
node history
Node Type: note [id://526714]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (6)
As of 2015-07-02 00:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (25 votes), past polls