#!/perl/bin/perl # # test.pl -- use strict; use warnings; use diagnostics; use String::Similarity; my @authors1 = ( 'Vic Broquard', 'Broquard Vic', 'Victor E. Broquard', ); my @authors2 = ( 'Peter Prinz', 'Ulla Kirch-Prinz', ); my @authors3 = ( 'Larry Wall', 'Tom Christiansen', 'Jon Orwant', ); print "Average Similarity for \@authors1 = ",check_similarity(@authors1),"\n"; print "Average Similarity for \@authors2 = ",check_similarity(@authors2),"\n"; print "Average Similarity for \@authors3 = ",check_similarity(@authors3),"\n"; sub check_similarity { my ($count,$similarity_total); for my $ref (combinations(@_)) { if (scalar(@$ref) == 2) { $count++; $similarity_total += similarity (@{$ref}[0],@{$ref}[1]); } } return $similarity_total / $count; } sub combinations { return [] unless @_; my $first = shift; my @rest = combinations(@_); return @rest, map { [$first, @$_] } @rest; } C:>test Average Similarity for @authors1 = 0.666666666666667 Average Similarity for @authors2 = 0.444444444444444 Average Similarity for @authors3 = 0.246153846153846