Подстановочный знак для хеш-элемента в Perl - PullRequest
4 голосов
/ 03 января 2012

Я пытаюсь проверить, существует ли определенный хеш-элемент. У меня есть два ключа для хэша:

if (exists $hash{$key1}{*})
{
then do blabla
}

Итак, где *, я хотел бы использовать подстановочный знак (т. Е. Это значение может быть любым). Что такое символ подстановочных знаков для Perl в такой ситуации? Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 03 января 2012

Подстановочных знаков нет.

Вы можете получить список ключей следующим образом:

my @keys_in_hash = keys %{ $hash{key1} };

… который вы затем можете проверить, чтобы узнать, имеет ли он длину, протестировать, используя grep или что-то еще.

3 голосов
/ 22 января 2012

Ваш оригинальный код

if (exists $hash{$key1}{*})
{
then do blabla
}

Если вы хотите проверить, содержит ли хеш второго уровня любые ключи, то вы можете сделать это

if (%{$hash{$key1}}) {
    # do blabla
}

Если вы хотите подобрать все ключи, которые соответствуют шаблону, скажем, все клавиши, начинающиеся с «foo», то вы можете сделать это:

my @matching_keys = grep m/^foo/so => keys %{$hash{$key1}};

if (@matching_keys) {
    # do something
    # matching values are in @{$hash{$key1}}{@matching_keys}
}
...