Подтвердить что ты не робот

Как проверить, является ли хэш пустым в perl

Я использую следующий код, чтобы проверить, пустой ли хэш. Есть ли лучший способ и безопасно ли это использовать?

if (!keys %hash) { print "Empty";} 
4b9b3361

Ответ 1

if (%hash)

Будет работать нормально.

Из perldoc perldata:

Если вы оцениваете хэш в скалярном контексте, он возвращает false, если хэш пусто. Если есть пары ключ/значение, он возвращает true; Больше точно, возвращаемое значение представляет собой строку, состоящую из числа использованные ковши и количество выделенных ведер, разделенных слэш.

Ответ 2

Была ошибка, из-за которой привязанные хеши в скалярном контексте всегда возвращали false. Ошибка была исправлена ​​в 5.8.5. Если вы обеспокоены обратной совместимостью, то я бы придерживался if( !keys %hash ). В противном случае используйте if( !%hash ), как рекомендовано другими.

Ответ 3

Simpler:

if (!%hash) { 
    print "Empty";
} 

! накладывает скалярный контекст, а хэш, вычисляемый в скалярном контексте, возвращает:

  • false, если есть нулевые ключи (не указаны в документации, но экспериментально возвращает 0

  • Строка, обозначающая, сколько используемых/выделенных ковшей используется для клавиш > 0, что, конечно, НЕ будет ложным (например, "3/6" )

Ответ 4

"Лучше" - субъективный термин. Однако я бы сказал, что код, который легче понять, можно охарактеризовать как "лучше". По этой причине я пришел к выводу, что !keys %hash лучше, потому что все, написавшие perl-код, будут знать, что делает этот код и что он работает. !%hash - это что-то, по крайней мере, мне придется искать, чтобы убедиться, что он действительно работает или только выглядит так, как будто это сработает. (Причина в том, что возвращаемое значение хеша в скалярном контексте довольно запутанно, в то время как поведение массивов в скалярном контексте хорошо известно и часто используется.)

Кроме того, !keys %hash сохраняется.

Нет, нет лучшего или более безопасного способа проверить, является ли хэш пустым.