#!/usr/bin/perl use strict; use warnings; my $bits=1_000_000; my $val=42; my $bin_data=''; for(my $i=0; $i<$bits; $i+=8) { $bin_data.=pack('C',int(rand(256))); } my @returned; my $str_data=unpack('B*',$bin_data); my ($x,$bit,$last_bit,$val_neg)=(0,0,0,-$val); for(0..length($str_data)-1) { $bit=substr($str_data,$_,1); $x = $bit ? $val : $val_neg; if($bit xor $last_bit) { push @returned, $x } elsif(@returned==0) { push @returned, $x } else { $returned[-1] += $x } $last_bit=$bit; } print @returned+0,"\n";