Perl hash, когда и ключи и значения являются ссылками на массив

У меня проблема, когда пары чисел отображаются на другие пары чисел. Например, (1,2)->(12,97). Некоторые пары могут отображаться на множество других пар, поэтому мне действительно нужна возможность отображения пары в список списков, например (1,2)->((12,97),(4,1)). В конце концов, я хочу обрабатывать каждое из значений (т.е. каждый список списков) отдельно.

В Python я мог бы сделать это, просто сказав:

key = ( x, y )
val = [ a, b ]
if (x,y) not in my_dict:
    my_dict[ (x,y) ] = []
my_dict[ (x,y) ].append( [a,b] )

Однако в Perl я должен использовать ссылки для ключей и значений. Поэтому я, конечно, могу сказать:

$keyref = [ x1, y1 ]
$valref = [ a, b ]
%my_hash = { $keyref => $valref }

Но что произойдет, если появится другая пара (x2,y2)? Даже если x2==x1 и y2==y1, $keyref=[x2,y2] будет отличаться от предыдущего сгенерированного keyref, поэтому я не вижу способа выполнить поиск. Конечно, я мог бы сравнить (x2,y2) с каждым разыменованным хэш-ключом, но, в конце концов, Бог дал нам хэш-таблицы именно для того, чтобы избежать необходимости делать это.

Есть ли решение на Perl?

Спасибо,

-W.

5
задан wchlm 26 October 2011 в 05:44
поделиться