[Pdx-pm] bit wise comparison
Eric Wilhelm
enobacon at gmail.com
Thu Feb 11 13:35:31 PST 2010
# from Tom Keller
# on Thursday 11 February 2010 12:22:
>$in = 'ACCTCCTCCTCGAGTATGTG';
>$tgt = 'TATCTTGCGCCGGAGATAAT';
>$mask = pack("A*",$in)^pack("A*",$tgt);
>$matches = $mask =~ tr/"\x0"/"\x0"/;
I get warnings from the quotes (") in the tr//. You *did* enable
warnings, right? :-D
An interesting, but slower trick would let you know where the matches
are in a more straightforward way.
$tgt =~ s/(.)/(?:($1)|.)/g;
my @matches = $in =~ m/^$tgt/;
But why pack() ASCII characters into "A*" ASCII characters? You should
get a same and faster result with:
my $mask = $in ^ $tgt;
my $matches = $mask =~ tr/\x0//;
--Eric
--
"You can't win. You can't break even. You can't quit."
--Ginsberg's Restatement of the Three Laws of Thermodynamics
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------
More information about the Pdx-pm-list
mailing list