The undef modifier in Perl is used for explicitly nullifying variables (scalars, arrays, hashes) or removed values. By applying undef, the developer tells the interpreter that the value of the variable is now "undefined". This can be useful for memory cleanup or logic reset.
Examples:
my $var = 42; undef $var; # $var is now undefined my @array = (1, 2, 3); undef @array; # Array is emptied, length = 0 my %hash = (a => 1, b => 2); undef %hash; # Hash is empty
Nuances:
undef does not delete the variable itself; it remains in scope but loses its value.undef clears the entire structure. For individual elements, use delete $hash{key} or splice/pop/shift for arrays.$var = '' or an empty list to an array/hash).Can
undefaffect the size of an array or the number of elements in a hash?
Answer: Yes! For arrays, after undef @arr, their length (scalar @arr) becomes 0. For a hash, undef %hash completely clears the structure. This is not the same as assigning an empty list (@arr = ();), but the outcome is identical in length. Do not confuse with undef $arr[0], which will nullify only that element but not reduce the size!
my @arr = (1, 2, 3); undef @arr; # @arr is now empty (length == 0) my @arr2 = (1, 2, 3); undef $arr2[1]; # Now $arr2[1] == undef, but @arr2 is still (1, undef, 3), length = 3.
Story
In one project, a developer cleared an array using undef $array[0], expecting this to free the entire structure. But the remaining elements remained hanging, causing the code to become unstable when working with indices.
Story
In another project, a programmer assigned undef to a scalar instead of clearing the array, so the array remained the same, and the bug extended the list to tens of thousands of elements, causing an Out-of-Memory error.
Story
When writing the logic to check for an empty hash, they confused the difference between undef %hash and deleting all keys in a loop. Sometimes after undef, instead of reinitializing, there was unexpected repeated access to the hash, causing logical errors and re-creation...