use strict;
use warnings;
my $data1 = { item1 => 2, item2 => 1, item3 => 4 };
my $data2 = { item1 => 0, item2 => 1, item3 => 3 };
my $cnt = 0;
my $data1_sum = 0;
my $data1_sum_p = 0;
my $data2_sum = 0;
my $data2_sum_p = 0;
my $sum = 0;
for (sort keys %{ $data1 }) {
if (defined $data2->{$_}) {
$data1_sum += $data1->{$_};
$data1_sum_p += $data1->{$_} ** 2;
$data2_sum += $data2->{$_};
$data2_sum_p += $data2->{$_} ** 2;
$sum += $data1->{$_} * $data2->{$_};
$cnt++;
}
}
my $s = ($sum - ($data1_sum * $data2_sum / $cnt));
my $d = sqrt((($data1_sum_p - ($data1_sum ** 2) / $cnt) * ($data2_sum_p - ($data2_sum ** 2) / $cnt)));
print $s / $d;