use strict;
use warnings;

my $data1 = { item1 => 2, item2 => 1, item3 => 4 };
my $data2 = { item1 => 2, item2 => 1, item3 => 5 };

my $product = 0;
my $data1_vec = 0;
my $data2_vec = 0;

for (sort keys %{ $data1 }) {
    if (defined $data2->{$_}) {
        $product += $data1->{$_} * $data2->{$_};
    }
    $data1_vec += $data1->{$_} **  2;
}
for (sort keys %{ $data2 }) {
    $data2_vec += $data2->{$_} **  2;
}

print $product / (sqrt($data1_vec) * sqrt($data2_vec));