in reply to Which data structure should I use?

If you are to filter by either first number, second or id I'd suggest to use

$hoh->{$id} = { first_number => $first_num, second_number => $second_num};

and then to filter simply use grep

# Retrieve all IDS were first number is 2 my @ids = grep { $hoh->{$_}->{first_number} == 2 } keys $hoh;