それだと、ループの中で毎回ハッシュを初期化してしまいます。

$data{$id} = { data1 => $data1, data2 => $data2};

とするとうまくいきますた。