in reply to Re^4: Can you write a faster code to perform this task?
in thread Can you write a faster code to perform this task?

tr is MUCH faster than s though. I tried to work this out but didn’t hit on trizen’s cleverness. So…

# (v5.18.2) built for darwin-2level 'tr' => sub { $str =~ tr/M/~/sr=~tr/~//; }, -- count 3 regex 3 regex2 3 split 3 tr 3 Rate regex2 split regex count tr regex2 169354/s -- -62% -65% -75% -94% split 446500/s 164% -- -7% -34% -85% regex 481882/s 185% 8% -- -29% -84% count 674634/s 298% 51% 40% -- -78% tr 3044813/s 1698% 582% 532% 351% --

Update: as trizen noted in his code, the /r flag to tr came in at 5.14. It won’t work on older Perls (update: <- stupid apostrophe begone).

Replies are listed 'Best First'.
Re^6: Can you write a faster code to perform this task?
by LanX (Saint) on Sep 29, 2014 at 17:56 UTC
    > I tried to work this out but didn’t hit on trizen’s cleverness.

    me too / neither =)

    (tried /s but the returned count wasn't for groups)

    > the /r flag to tr came in at 5.14. It won’t work on older Perls

    If it's that fast using $str twice shouldn't be a big problem.

    Should be mentioned that tr is destructive, i.e. a safety copy of the string may be needed too.

    Cheers Rolf

    (addicted to the Perl Programming Language and ☆☆☆☆ :)