in reply to diff (different enough)
That split is bound to be very expensive, both in terms of time and memory.for my $i (0 .. length($str1)) { if (substr($str1, $i, 1) ne substr($str2, $i, 1)) { $val++; } }
You could optimize that further, by looking at five letters at a time:
my $step = 5; my $bound = int (length($str1) / $step); for my $i (0 .. $bound) { if (substr($str1, ($i * $step), $step) ne (substr($str2, ($i * $st +ep), $step)) { $val++; } }
Update: If you need to update $val for each character that's different, do something like this:
Uglier, yes, but still faster than split.for my $i (0 .. $bound) { my $substr1 = substr($str1, ($i * $step), $step); my $substr2 = substr($str2, ($i * $step), $step); if ($substr1 ne $substr2) { for my $j (0 .. ($step - 1)) { if (substr($substr1, $j, 1) ne substr($substr2, $j, 1)) { $val++; } } } }
|
|---|