[Israel.pm] count chars

Yossi Klein kleinyossi at yahoo.com
Mon Sep 3 04:55:54 PDT 2007


I believe that the recommended fastest way of doing this is 

$cnt = $string =~ tr/a/a/;

Adding:

sub c_tr {
    my ($c) = @_;
    return $string =~ tr/$c/$c/;
}

to Edan's benchmarking example (Hi Ephraim), I get:

                      Rate     c_regexp     c_index     c_tr
c_regexp  100849/s                --         -69%     -91%
c_index    326938/s           224%             --     -70%
c_tr        1085603/s           976%       232%         --


Yossi


----- Original Message ----
From: Yuval Kogman <nothingmuch at woobling.org>
To: Perl in Israel <perl at perl.org.il>
Sent: Monday, September 3, 2007 2:42:55 PM
Subject: Re: [Israel.pm] count chars

You can use the goatse.cx operator:

    my $matches =()= ( $string =~ /a/g );

This will evaluate the regex in list context and only then coerce it
to scalar context.

On Mon, Sep 03, 2007 at 13:38:05 +0300, Amir E. Aharoni wrote:
> What is the best way to count the number of times that a character
> appears in a string?
> 
> Currently i do this:
> 
> ----
> my $string = "abracadabra";
> my @matches = ($string =~ /a/g);
> print scalar @matches; # 5
> print "@matches"; # a a a a a
> ----
> 
> Is there a way to do it without the intermediate array?
> 
> This doesn't work:
> 
> ----
> my $string = "abracadabra";
> print scalar ($string =~ /a/g); # prints 1!
> ----
> 
> I can use this:
> 
> ----
> my $matches = ($string =~ s/(a)/$1/g);
> ----
> 
> It replaces the characters with itself and returns the number of
> substitutions, but it doesn't improve readability.
> 
> Any other ideas?
> 
> -- 
> Amir Elisha Aharoni
> words: http://aharoni.wordpress.com/
> music: http://www.myspace.com/tzabari/
> _______________________________________________
> Perl mailing list
> Perl at perl.org.il
> http://perl.org.il/mailman/listinfo/perl

-- 
  Yuval Kogman <nothingmuch at woobling.org>
http://nothingmuch.woobling.org  0xEBD27418

_______________________________________________
Perl mailing list
Perl at perl.org.il
http://perl.org.il/mailman/listinfo/perl





      ____________________________________________________________________________________
Luggage? GPS? Comic books? 
Check out fitting gifts for grads at Yahoo! Search
http://search.yahoo.com/search?fr=oni_on_mail&p=graduation+gifts&cs=bz



More information about the Perl mailing list