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;