Обычно ожидается, что вы хотя бы потратите несколько часов , пытаясь самостоятельно написать решение.Мы с радостью поможем вам, если вы предприняли достойную попытку, но у вас закончились идеи, но она не сработает, если вы, кажется, сбросили свою проблему на нас и ждете ответа.пока вы пьете кружку кофе.Вам сообщили об этом до , и только один из ваших постов имеет чистый положительный голос.Над этим нужно поработать.
Вы уверены, что действительно хотите хэш хэшей?Это очень напоминает ваш предыдущий вопрос Как узнать, существует ли значение в хэше, без использования ключа в perl? , где мы в значительной степени установили, что это был неправильный выбор.
Единственный не-очевидная часть извлекает значения из массива в парах, я и я использовали цикл C-style for
для достижения этого.
Я использовал Data::Dumper
только для отображения результирующего хэша хэшей.
use strict;
use warnings 'all';
my @arr = qw/ 1 apple 2 orange 1 orange 3 berry 2 berry 1 berry /;
my %hash;
for ( my $i = 0; $i < $#arr; $i += 2 ) {
$hash{$arr[$i]}{$arr[$i+1]} = 1;
}
use Data::Dumper;
print Dumper \%hash;
output
$VAR1 = {
'2' => {
'berry' => 1,
'orange' => 1
},
'3' => {
'berry' => 1
},
'1' => {
'berry' => 1,
'orange' => 1,
'apple' => 1
}
};
Update
Вот пример генерации ключей, как я описал в комментариях.Это почти идентично приведенному выше решению, но результирующее содержимое хеша отличается.
use strict;
use warnings 'all';
my @arr = qw/ 1 apple 2 orange 1 orange 3 berry 2 berry 1 berry /;
my %hash;
for ( my $i = 0; $i < $#arr; $i += 2 ) {
$hash{"@arr[$i,$i+1]"} = 1;
}
use Data::Dumper;
print Dumper \%hash;
output
$VAR1 = {
'2 berry' => 1,
'1 apple' => 1,
'3 berry' => 1,
'1 orange' => 1,
'1 berry' => 1,
'2 orange' => 1
};