tie(my %data, 'Tie::IxHash'); while ( ... ) { # add info to %data if ( ) { if ( ! exists $data{$top_level_key) ) { $data{$top_level_key} = {}; tie ( %{$data{$top_level_key}}, 'Tie::IxHash' ); } ... } ... }