Как очистить хеш Perl

Скажем, мы определяем анонимный хеш как это:

my $hash = {};

И затем используйте хеш впоследствии. Затем пора освободить или очистить хеш для повторного использования. После некоторого поиска Google я нашел:

%{$hash} = () 

и:

undef %{$hash}

Оба удовлетворят мои потребности. Каково различие между двумя? Они оба - идентичные способы освободить хеш?

37
задан Peter Mortensen 8 January 2014 в 13:05
поделиться

2 ответа

Да, они абсолютно идентичны. Оба удаляют все существующие ключи и значения из таблицы и устанавливают хэш в пустой список.

См. perldoc -f undef :

undef EXPR
undef Отменяет значение EXPR, которое должно быть lvalue. Использовать только на скалярном значении, массиве (с использованием "@"), хэше (с использованием "%"), подпрограмма (с использованием "&") или typeglob (с использованием "*") ...
Примеры:

               undef $foo;  
               undef $bar{'blurfl'};      # Compare to: delete $bar{'blurfl'};  
               undef @ary;  
               undef %hash;

Однако , вы не должны использовать undef для удаления значения чего-либо, кроме скаляра. Для других типов переменных установите "пустую" версию этого типа, например для массивов или хэшей @foo = (); % bar = ();

24
ответ дан 27 November 2019 в 04:49
поделиться

% $ hash_ref = (); имеет больше смысла, чем отключение хеша. Отмена определения хеша говорит о том, что вы закончили с хешем. Назначение пустого списка означает, что вам просто нужен пустой хеш.

32
ответ дан 27 November 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: