Nice implementation. But I would also suggest that this should patch the existing perl implementation of Text::Levenshtein. Text::LevensteinXS is vanilla C and compiles and installs under 5.6.x on Win32 or Linux. You don't need 5.8 but it comiles with that too. See below. You may find Algorithm::HowSimilar does a very similar job but faster in pure perl.
[root@devel3 perl_modules]# tar -xzf Text-LevenshteinXS-0.01.tar.gz
[root@devel3 perl_modules]# cd Text-LevenshteinXS-0.01
[root@devel3 Text-LevenshteinXS-0.01]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Text::LevenshteinXS
[root@devel3 Text-LevenshteinXS-0.01]# make
cp LevenshteinXS.pm blib/lib/Text/LevenshteinXS.pm
AutoSplitting blib/lib/Text/LevenshteinXS.pm (blib/lib/auto/Text/Leven
+shteinXS)
/usr/bin/perl /usr/local/lib/perl5/5.6.2/ExtUtils/xsubpp -typemap /us
+r/local/lib/perl5/5.6.2/ExtUtils/typemap LevenshteinXS.xs > Levensht
+einXS.xsc && mv LevenshteinXS.xsc LevenshteinXS.c
Please specify prototyping behavior for LevenshteinXS.xs (see perlxs m
+anual)
cc -c -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE
+-D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\"
+ -fpic "-I/usr/local/lib/perl5/5.6.2/i686-linux/CORE" LevenshteinXS
+.c
Running Mkbootstrap for Text::LevenshteinXS ()
chmod 644 LevenshteinXS.bs
rm -f blib/arch/auto/Text/LevenshteinXS/LevenshteinXS.so
LD_RUN_PATH="" cc -shared -L/usr/local/lib LevenshteinXS.o -o blib/a
+rch/auto/Text/LevenshteinXS/LevenshteinXS.so
chmod 755 blib/arch/auto/Text/LevenshteinXS/LevenshteinXS.so
cp LevenshteinXS.bs blib/arch/auto/Text/LevenshteinXS/LevenshteinXS.bs
chmod 644 blib/arch/auto/Text/LevenshteinXS/LevenshteinXS.bs
Manifying blib/man3/Text::LevenshteinXS.3
[root@devel3 Text-LevenshteinXS-0.01]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
1..6
# Running under perl version 5.006002 for linux
# Current time local: Thu Mar 4 14:36:44 2004
# Current time GMT: Thu Mar 4 14:36:44 2004
# Using Test.pm version 1.24
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
[root@devel3 Text-LevenshteinXS-0.01]# make install
Installing /usr/local/lib/perl5/site_perl/5.6.2/i686-linux/auto/Text/L
+evenshteinXS/LevenshteinXS.so
Installing /usr/local/lib/perl5/site_perl/5.6.2/i686-linux/auto/Text/L
+evenshteinXS/LevenshteinXS.bs
Files found in blib/arch: installing files in blib/lib into architectu
+re dependent library tree
Installing /usr/local/lib/perl5/site_perl/5.6.2/i686-linux/auto/Text/L
+evenshteinXS/autosplit.ix
Installing /usr/local/lib/perl5/site_perl/5.6.2/i686-linux/Text/Levens
+hteinXS.pm
Installing /usr/local/man/man3/Text::LevenshteinXS.3
Writing /usr/local/lib/perl5/site_perl/5.6.2/i686-linux/auto/Text/Leve
+nshteinXS/.packlist
Appending installation info to /usr/local/lib/perl5/5.6.2/i686-linux/p
+erllocal.pod
[root@devel3 Text-LevenshteinXS-0.01]# perl -v
This is perl, v5.6.2 built for i686-linux
[snip]
[root@devel3 Text-LevenshteinXS-0.01]#
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Text::LevenshteinXS
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>nmake
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
cp LevenshteinXS.pm blib\lib\Text\LevenshteinXS.pm
AutoSplitting blib\lib\Text\LevenshteinXS.pm (blib\lib\auto\Text\Leven
+shteinXS)
G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib G:\Perl\lib\E
+xtUtils/xs
ubpp -typemap G:\Perl\lib\ExtUtils\typemap LevenshteinXS.xs > Levensh
+teinXS.xsc
&& G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib -MExtUtils::Comma
+nd -e mv L
evenshteinXS.xsc LevenshteinXS.c
Please specify prototyping behavior for LevenshteinXS.xs (see perlxs m
+anual)
cl -c -nologo -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT
+ -DHAVE_DE
S_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_REA
+DFIX -O1 -
MD -DNDEBUG -DVERSION=\"0.01\" -DXS_VERSION=\"0.01\" -IG:\Perl\li
+b\CORE Le
venshteinXS.c
LevenshteinXS.c
"Running Mkbootstrap for Text::LevenshteinXS ()"
G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib -MExtUtils::C
+ommand -e
chmod 644 LevenshteinXS.bs
G:\Perl\bin\Perl.exe "-IG:\Perl\lib" "-IG:\Perl\lib" -MExtUtil
+s::Mksymli
sts -e "Mksymlists('NAME' => 'Text::LevenshteinXS', 'DLBASE' => 'Leve
+nshteinXS'
, 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' =
+> []);"
link -out:blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.dll
+-dll -nolo
go -nodefaultlib -release -libpath:"G:\Perl\lib\CORE" -machine:x86 L
+evenshtein
XS.obj G:\Perl\lib\CORE\perl56.lib oldnames.lib kernel32.lib user32.
+lib gdi32.
lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib olea
+ut32.lib
netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc3
+2.lib odbc
cp32.lib msvcrt.lib -def:LevenshteinXS.def
Creating library blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.li
+b and obje
ct blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.exp
G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib -MExtUtils::C
+ommand -e
chmod 755 blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.dll
G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib -MExtUtils::C
+ommand -e
cp LevenshteinXS.bs blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.bs
G:\Perl\bin\Perl.exe -IG:\Perl\lib -IG:\Perl\lib -MExtUtils::C
+ommand -e
chmod 644 blib\arch\auto\Text\LevenshteinXS\LevenshteinXS.bs
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>nmake test
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
G:\Perl\bin\Perl.exe -Iblib\arch -Iblib\lib -IG:\Perl\lib -IG:
+\Perl\lib
test.pl
1..6
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>nmake install
Microsoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.
Installing G:\Perl\site\lib\auto\Text\LevenshteinXS\LevenshteinXS.dll
Installing G:\Perl\site\lib\auto\Text\LevenshteinXS\LevenshteinXS.lib
Installing G:\Perl\site\lib\auto\Text\LevenshteinXS\LevenshteinXS.exp
Installing G:\Perl\site\lib\auto\Text\LevenshteinXS\LevenshteinXS.bs
Installing G:\Perl\site\lib\auto\Text\LevenshteinXS\autosplit.ix
Installing G:\Perl\site\lib\Text\LevenshteinXS.pm
Writing G:\Perl\site\lib\auto\Text\LevenshteinXS\.packlist
Appending installation info to G:\Perl\lib/perllocal.pod
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>perl -v
This is perl, v5.6.1 built for MSWin32-x86-multi-thread
[snip]
D:\Tools\Perl Modules\Text-LevenshteinXS-0.01>