$ perl -E '
$s1 = q{gctgc};
$s2 = q{gctcc};
$x = $s1 ^ $s2;
say for map sprintf( q{0x%02x}, ord ), split m{}, $x;'
0x00
0x00
0x00
0x04
0x00
$
####
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;
}
##
##
at
gctgctaggctgtgctgccaactggatcctgcgcgggacgtcctttgtctacgtcccgtcggcgctgaatcctgcggacgacccctctcgtggtcg
ttggggctct
ccgccctcttctccgcctgccgttc
ggc
##
##
use strict;
use warnings;
use 5.014;
open my $inFH, q{<}, \ <;
my %diffPosns;
while ( <$inFH> )
{
findDiffPosns( $baseStr, $_ );
}
close $inFH or die $!;
chomp $baseStr;
substr $baseStr, $_, 1, q{X} for keys %diffPosns;
say for split m{X+}, $baseStr;
sub findDiffPosns
{
my( $baseStr, $nextStr ) = @_;
my $diff = $baseStr ^ $nextStr;
$diffPosns{ pos $diff } ++ while $diff =~ m{(?=[^\0])}g;
}