in reply to diff (different enough)

Instead of splitting the two strings, why not use substr?
for my $i (0 .. length($str1)) { if (substr($str1, $i, 1) ne substr($str2, $i, 1)) { $val++; } }
That split is bound to be very expensive, both in terms of time and memory.

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:

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++; } } } }
Uglier, yes, but still faster than split.

Replies are listed 'Best First'.
additions
by jettero (Monsignor) on Jul 21, 2000 at 02:09 UTC
    I have verified that with your new additions the &diff is about 80% faster! Thanx a bunch. Course, it's still abysmally slow, but I'm startin' to think I might need C to do much better.