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

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

Скажем, мы определяем анонимный хэш следующим образом:

my $hash = {};

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

%{$hash} = () 

и

undef %{$hash}

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

4b9b3361

Ответ 1

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

См. perldoc -f undef:

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

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

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

Ответ 2

%$hash_ref = (); имеет больше смысла, чем отказ от хэша. Undef-ing hash говорит, что вы закончили с хешем. Присвоение пустого списка говорит о том, что вам нужен пустой хеш.