Ответ 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 = ();