It took me a while to figure it out. I am putting your response in more explicit terms for neophytes like myself.
$Str1 = "AAAACCCCGGGGTTTT"; $Str2 = "ACGTACGTACGTACGT"; $cmp = $Str1^$Str2; $cmp |= '0' x length($cmp); print "$Str1\n"; print "$Str2\n"; print "$cmp\n";
# What is ‘|=’ doing? This is bitwise ‘or’. Does ‘or’ on left side and right side (right side value is ‘0’ or 00110000). Puts result of ‘or’ in left side. Originally, the value in $cmp for “A” ^ “G” was 00000110 (= 6) – this is ‘Acknowledgement’ – this is not a printable character.**OUTPUT** AAAACCCCGGGGTTTT ACGTACGTACGTACGT 0265204764035730
By doing the ‘or’ with “0” (00110000 = 48) you convert ‘6’ to ‘6’ + ‘48’ = ‘54’ – this is the value for the character 6. So, $cmp looked empty because all of the values are for non-printable characters.
A = 01000001
G = 01000111
^ 00000110 = 6 ‘Acknowledgement’
left 00000110
‘0’ 00110000
| (or) 00110110 = 54 ‘character 6’
******************
A = 01000001
T = 01010100
^ 00010101 = 21 ‘Negative Acknowledgement’
left 00010101
‘0’ 00110000
|(or) 00110101 = 53 ‘character 5’
Thanks again for your help,
romano (aka KennB)In reply to Re^2: bitwise string operator
by romano
in thread bitwise string operator
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |