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; #### $ perl 171126.pl 0.4988 0.00312 #### $ perl -v This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-thread-multi (with 1 registered patch, see perl -V for more detail)