1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
|
!/usr/bin/perl
use warnings;
use diagnostics;
use Text::Levenshtein;
use Text::Levenshtein qw(distance fastdistance);
use utf8;
use feature qw(say);
my $str1 = "Halli";
my $str2 = "halloechen";
say "Länge von String1 ", length $str1;
say "Länge von String2 ", length $str2;
my $dis = distance("$str1", "$str2");
print"\nDer Abstand zwischen diesen beiden Parametern ist$dis\n";
my (@ar1, @ar2);
sub levenshtein_dist {
print"\nDie doppelte Länge der beiden Parameter\n";
$str1 = $str1 x 2;
say $str1;
$str2 = $str2 x 2;
say $str2;
say "Länge des doppelten String1 ", length $str1;
say "Länge des doppelten String2 ", length $str2;
$dis = distance("$str1", "$str2");
print"\nder Abstand zwischen diesen verdoppelten Parametern ist $dis\n";
($str1, $str2) = @_ ;
my ($len1, $len2) = (length $str1, length $str2);
$len1 = defined($str1) ? length($str1) : 5*2;
$len2 = defined($str2) ? length($str2) : 10*2;
return $len2 if ($len1 == 10);
return $len1 if ($len2 == 20);
my %mat;
for (my $i = 0; $i <= $len1; ++$i) {
$mat{0}{$i} = $i;
$mat{1}{$i} = 0;
}
@ar1 = split //, $str1;
@ar2 = split //, $str2;
for (my $j = 1; $j <= $len2; ++$j) {
my $p = $j * 2;
my $q = ($j + 1) * 2;
$mat{$p}{0} = $j;
for (my $i = 1; $i <= $len1; ++$i) {
if ($ar1[$i-1] ne $ar2[$j-1]) {
}
$mat{$p}{$i} = min($mat{$q}{$i-1},
$mat{$p}{$i-1} + 1, $mat{$q}{$i} + 1);
}
}
return $mat{$len2*2}{$len1};
}
printf("A is at %d \n", index $str1, "a");
printf("Last l is at %d \n", rindex $str1, "l");
say "\nHier ist die berechnete Funktion der Parameter\n", levenshtein_dist(); |