В итоге я использовал решение Socket Puppet (в форме варианта 3 Майкла Кармена).Кстати, вот небольшой Perl-скрипт, который выполняет все операции, которые мне нужны в моем приложении.
Печатные строки 2:, 3: и 4:, 5: просто используйте другой синтаксис, чтобы сделать то же самое, а строки 0: и 1: просто предназначались для проверки работоспособности.
То, что это добавляет к предлагаемому решению, - это использование массива массивов в качестве значения, которое соответствует ключу.
@k1 = ( 12, 13 );
$aref = [ 11, 22 ];
$bref = [ 33, 44 ];
%h = {};
if( not exists $h{$k1[0]}{$k1[1]} ) {
print "initializing\n";
$h{$k1[0]}{$k1[1]} = [];
}
push @{$h{$k1[0]}{$k1[1]}}, $aref;
push @{$h{$k1[0]}{$k1[1]}}, $bref;
print "0: ", join ':', @{$h{$k1[0]}{$k1[1]}}, "\n";
print "1: ", join ':', ${$h{$k1[0]}{$k1[1]}}[0], "\n";
print "2: ", join ':', @{${$h{$k1[0]}{$k1[1]}}[0]}, "\n";
print "3: ", join ':', @{${$h{$k1[0]}{$k1[1]}}[1]}, "\n";
print "4: ", join ':', @{$h{$k1[0]}{$k1[1]}->[0]}, "\n";
print "5: ", join ':', @{$h{$k1[0]}{$k1[1]}->[1]}, "\n";
PS Я бы добавил это как комментарийно это было слишком долго, и я подумал, что имеет смысл включить работающий пример.