use strict; use warnings; use feature 'say'; my $len = 100_000; my $str = join '', map { int( rand 2 ) ? 0 : 1 } 1 .. $len; say +( $str =~ tr/1/1/ ) / $len; for ( 1 .. 1_000_000 ) { my $pos = int rand $len; my $chr = substr $str, $pos, 1; substr( $str, $pos, 1, int( rand 2 ) ? 0 : 1 ) if $chr } say +( $str =~ tr/1/1/ ) / $len;