У меня есть хеш perl, который я индексирую так:
my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];
Когда я пытаюсь напечатать имена клавиш, как это:
foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}
Я получаю следующую ошибку:
Type of arg 1 to keys must be hash (not hash slice) at test.pl
Однако, когда я передаю массив ref функции и печатаю его там, он печатает значения:
test(\%hash);
sub test
{
my ($hash) = @_;
foreach my $key (keys %{$hash->{'number'}})
{
print "Key: $key\n"; #outputs: even odd
}
}
Может кто-нибудь, пожалуйста, дайте мне знать, что здесь происходит не так? Также, если у меня есть многоключевой хэш, который у меня есть в этом случае, где хэш индексируется как числом, так и четным или нечетным, если я делаю что-то вроде этого:
foreach my $key (keys %hash)
{
print "First Key: $key\n"; #Outputs number
}
Тогда я всегда получу «число» в качестве правильного выхода, и я никогда не смогу получить «четное», «нечетное» в качестве выходных данных, верно? Это просто для ознакомления с хорошей практикой кодирования:)
Это полный код:
sub test
{
my ($hash) = @_;
foreach my $key (keys %{$hash->{'number'}})
{
print "Key: $key\n";
}
}
my %hash;
$hash{'number'}{'even'} = [24, 44, 38, 36];
$hash{'number'}{'odd'} = [23, 43, 37, 35];
test(\%hash);
foreach my $key (keys %hash)
{
print "First Key: $key\n";
}
foreach my $key (keys %hash{'number'})
{
print "Key: $key\n";
}
Спасибо,
Новичок