Вопреки тому, что вы сказали, Perl НЕ имеет возможности сравнивать такие вещи, как массивы, на равенство, как вы заявляете.Для начала, в Perl нет определения равенства массивов.И если определение требует сравнения содержимого массива, то Perl не имеет определения равенства для большинства вещей, которые можно найти в массиве.
Ближайший Perl для определения массивов равенства:их адрес.Если это то, что вы хотите использовать, тогда это довольно просто:
$key = ['a', 'b'];
$hash{$key} = [ $key, $val ]; # Prevents the key from being freed.
print $hash{$key}[1];
В противном случае, Perl оставляет за вами право реализовывать то, что вы хотите, вместо того, чтобы заставлять вас использовать то, что он предоставляет.Я вижу два основных подхода.
Связанный хеш, в основном код, который представляет интерфейс хеша, фактически не являющийся хеш-таблицей, может поддерживать любой тип ключа.Вы можете использовать его для определения вашей версии равенства массивов.Может даже существовать существующий модуль (хотя я не видел его после очень быстрого поиска).
Другим подходом может быть создание функции, которая генерирует уникальный ключ из выражения ключа.
sub key{ "@_" } # Overly simplistic?
$hash{key('a', 'b')} = $val;
print $hash{key('a', 'b')};