Ключ хэша Perl определяется массивом - PullRequest
2 голосов
/ 23 июля 2010

У меня есть массив, и я делаю из него экземпляр хеша.Например, если массив:

@folders=(temp,usr,bin);

, тогда я хочу заполнить хеш:

$the_path{$folders[0]}{$folders[1]}{$folders[2]}="somevalue";

Но если массив только:

@folders=(bin);

, тогдая хочу, чтобы путь был:

$the_path{$folders[0]}="somevalue";

Проблема в том, что я не знаю заранее, как долго будет массив, и я действительно хотел бы не делать x if для этого заявленияРешение масштабируется ужасно.

Как мне это сделать?

1 Ответ

5 голосов
/ 23 июля 2010

Во-первых, это не то, как вы определяете массив в Perl.Вы, вероятно, хотите сказать

my @folders = ( 'temp', 'usr', 'bin' );

Существует старый прием для создания вложенных ключей хеш-функции из списка:

my %the_path;
my $tmp = \%the_path;
foreach my $item( @folders ) { 
    $tmp->{$item} = { };
    $tmp = $tmp->{$item};
}

Это приведет к структуре, подобной следующей:

$VAR1 = {
          'temp' => {
                      'usr' => {
                                 'bin' => {}
                               }
                    }
        };

Если вы хотите заменить пустой хеш-адрес на самом нижнем уровне строкой, вы можете отслеживать переменную count внутри цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...