%{$tableData{$hashkey}{$hashkey2}} = %tblData;
####
$tableData{$hashkey}{$hashkey2} = \%tblData;
####
my $hashkey2 = $tblData{$key2};
delete $tblData{$key2};
$tableData{$hashkey}{$hashkey2} = \%tblData;
####
$tableData{$hashkey}{delete $tblData{$key2}} = \%tblData;
####
my @key = grep defined, $key, $key2, $key3;
my %tableData;
my $store_row = eval join("", q(
sub {
my $row = shift;
$tableData), map("{delete \$row->{'$_'}}", @key), q( = $row;
}));
while (my @data = $dbh -> dbnextrow) {
s/^\s|\s$//g for @data;
my %tblData;
@tblData{@columnnames} = @data;
$store_row(\%tblData);
}