in reply to Compare two strings of same length, character-by-character

Another option, that is mostly straightforward...

#!/usr/bin/env perl use strict; use warnings; use List::Util qw(zip); my $str1='LFGSLSIIVAHHM'; my $str2='LFGSLSIIVSHHM'; my ($s1len, $s2len) = map {length} ($str1, $str2); die "Length mismatch: $str1 ($s1len) != $str2 ($s2len).\n" if $s1len != $s2len; my $match = grep {$_->[0] eq $_->[1]} zip [split //, $str1], [split //, $str2]; my $mismatch = $s1len-$match; print "Matches: $match\nMismatches: $mismatch\nPercent match: ", sprintf("%.01f", ($match / $s1len) * 100), "\n";

The output is:

Matches: 12 Mismatches: 1 Percent match: 92.3

This uses List::Util, which is a core Perl module, and aside from the slightly mysterious 'zip', reads like how a person would think through the problem; compare the first letter, compare the second, compare the third, and so on. No real magic that would require a #comment


Dave