Скажем, мы определяем анонимный хеш как это:
my $hash = {};
И затем используйте хеш впоследствии. Затем пора освободить или очистить хеш для повторного использования. После некоторого поиска Google я нашел:
%{$hash} = ()
и:
undef %{$hash}
Оба удовлетворят мои потребности. Каково различие между двумя? Они оба - идентичные способы освободить хеш?
Да, они абсолютно идентичны. Оба удаляют все существующие ключи и значения из таблицы и устанавливают хэш в пустой список.
См. 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 = ();
% $ hash_ref = ();
имеет больше смысла, чем отключение хеша. Отмена определения хеша говорит о том, что вы закончили с хешем. Назначение пустого списка означает, что вам просто нужен пустой хеш.