perlquestion
BrowserUk
<blockquote><i></i></blockquote>
<p>Given a string of bytes, I want to split the string into chunks of the same byte value, as efficiently as possible. Ie. Given 'aaabcccdeeefffggg', get 'aaa','b','ccc','d','eee','fff','ggg'. The string of bytes can contain *any* values 0 .. 255.
<P>I thought this would be easy, but has actually proved to be quite hard. The fastest, and in fact only way I've found is shown below. Test b checks the cost of the /m modifier, but is just a placeholder for something better...
<code>
$s = join'', map{ chr( 65+rand(26) ) x rand( 100 ) } 1 .. 1000;;
cmpthese -1,{
a=>q[
1 while $s =~ m[((?=(.))\2+)]g;
],
b=>q[
1 while $s =~ m[((?=(.))\2+)]mg;
]
};;
Rate a b
a 203/s -- -1%
b 205/s 1% --
</code>
<P>Anyone see a better, ie. more efficient way?
<div class="pmsig"><div class="pmsig-171588">
<hr />
<font size=1 >
<div>With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'</div>
<div>Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.</div>
<div>"Science is about questioning the status quo. Questioning authority". [http://www.theregister.co.uk/2016/11/02/complexity_in_it/|The enemy of (IT) success is complexity.]</div>
<div>In the absence of evidence, opinion is indistinguishable from prejudice. </div>
</font>
</div></div>