in reply to How to access each char in a string most quickly?
Here are a few alternatives assuming you cannot pre-split for your purpose.
My favorite hack is chop if I need speed and order does matter. It's about 4x faster than split and substantially faster than substr even if you have to reverse and copy for your needs. Better if you can avoid doing both, which you frequently can.
#! perl -sw use 5.010; use strict; use Benchmark qw[ cmpthese ]; our $LEN ||= 100; our $string = 'A' x $LEN; our @chars = split//, $string; cmpthese -3, { substr => q[ our $string; for ( 0 .. length $string ) { my $c = substr $string, $_, 1; } ], pre_split => q[ our @chars; for my $c ( @chars ) { ; } ], split => q[ our $string; my @chars = split //, $string; for my $c ( @chars ) { } ], unpack => q[ our $string; for ( unpack 'C*', $string ) { my $c = chr; } ], chop => q[ our $string; my $copy = $string; while( my $c = chop $copy ) { ; } ], rev_chop => q[ our $string; my $copy = reverse $string; while( my $c = chop $copy ) { ; } ], }; __END__ C:\test>byChar.pl Rate split unpack substr rev_chop chop p +re_split split 11018/s -- -74% -74% -81% -82% + -94% unpack 42513/s 286% -- -0% -26% -30% + -75% substr 42526/s 286% 0% -- -26% -30% + -75% rev_chop 57794/s 425% 36% 36% -- -5% + -66% chop 61056/s 454% 44% 44% 6% -- + -64% pre_split 171734/s 1459% 304% 304% 197% 181% + --
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: How to access each char in a string most quickly?
by ikegami (Patriarch) on Jul 03, 2009 at 02:27 UTC | |
by BrowserUk (Patriarch) on Jul 03, 2009 at 04:46 UTC | |
by ikegami (Patriarch) on Jul 03, 2009 at 05:01 UTC |