use strict; use warnings; use 5.014; open my $inFH, q{<}, \ <; chomp $baseStr; while ( <$inFH> ) { chomp; $baseStr = flagDiffs( $baseStr, $_ ); } close $inFH or die $!; say for split m{X+}, $baseStr; sub flagDiffs { my( $baseStr, $nextStr ) = @_; my $diff = $baseStr ^ $nextStr; my @posns; push @posns, pos $diff while $diff =~ m{(?=[^\0])}g; substr $baseStr, $_, 1, q{X} for @posns; return $baseStr; }