как проверить, если хеш пуст в Perl

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

if (!keys %hash) { print "Empty";} 
 Phoenix05 июн. 2018 г., 09:10
Работал для меня :)
 TLP26 февр. 2012 г., 01:07
Если вы чувствуете, что на ваш вопрос ответили, вы должны принять ответ, нажав на галочку слева от него.

Ответы на вопрос(4)

if (%hash)

Изperldoc perldata:

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

 choroba25 сент. 2013 г., 23:37
Кажется гораздо медленнее чемkeys %hash.

Simpler:

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

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

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

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

 Borodin25 февр. 2012 г., 15:55
Нет не возвращается"false", что было бы истинным значением. Возвращает ноль.
 DVK25 февр. 2012 г., 16:06
@ Бородин - неверные цитаты. Исправлена

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

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

Также,!keys %hash это сохранить.

Так что нет, нет лучшего или более надежного способа проверить, пуст ли хеш.

Ваш ответ на вопрос