Рассмотрим следующий HoH:
$h = {
a => {
1 => x
},
b => {
2 => y
},
...
}
Есть ли способ проверить, существует ли хэш-ключ на втором вложенном уровне без вызова keys(%$h)
?Например, я хочу сказать что-то вроде:
if ( exists($h->{*}->{1}) ) { ...
(я понимаю, что вы не можете использовать *
в качестве подстановочного знака хеш-ключа, но вы поняли идею ...)
Я пытаюсь избежать использования keys()
, потому что он сбросит итератор хеша, и я перебираю цикл $h
, используя:
while ( (my ($key, $value) = each %$h) ) {
...
}
Самая близкая языковая конструкция, которую я смог найти, это оператор умного совпадения (~~
), упомянутый здесь (и не упоминается в perlref perldoc), но даже если ~~
был доступен в версии Perl, которую я вынужден использовать (5.8.4),из того, что я могу сказать, это не сработает в этом случае.
Если это не удастся сделать, я предполагаю, что я скопирую ключи в массив или хэш перед входом в мой цикл while
(которыйкак я начал), но я надеялся избежать накладных расходов.