Как уже говорили другие, нет никаких ограничений на то, что разрешено использовать в качестве хеш-ключа. Если вы используете ссылку, она будет превращена в строку.
Однако бывают случаи, когда вам не нужны кавычки, и время, когда вам нужны кавычки вокруг вашего хеш-ключа. Если у вас есть пробелы или не алфавитно-цифровые символы, вам нужны кавычки вокруг вашего хеш-ключа. Интересно, что вы можете использовать точки, если вы используете только числовые символы. В противном случае вы не можете использовать точки, не заключая ключ в кавычки:
$hash{23.23.23} = "Legal Hash Key";
$hash{foo.bar} = "Invalid Hash Key";
$hash{"foo.bar"} = "Legal Hash Key because of quotes";
И, чтобы увидеть, что произойдет, если вы используете ссылку в качестве ключа:
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use Data::Dumper;
my %hash;
my $ref = [qw(this is an array reference)];
$hash{$ref} = "foobar"; #Using Array Reference as Key
say "\nDUMP: " . Dumper \%hash;
Производит:
DUMP: $VAR1 = {
'ARRAY(0x7f8c80803ed0)' => 'foobar'
};
Итак, ссылка на массив была строковой , то есть привязана к строке.
К сожалению, вы не опубликовали код, поэтому мы действительно не можем сказать, в чем ваша ошибка. Может быть, вам нужно поставить кавычки вокруг ключей хеша. Или, может быть, есть другая проблема.