Undefines the value of EXPR, which must be an lvalue. Use only on a scalar value, an array (using @
), a hash (using %
), a subroutine (using &
), or a typeglob (using *
). Saying undef $hash{$key}
will probably not do what you expect on most predefined variables or DBM list values, so don't do that; see delete
. Always returns the undefined value. You can omit the EXPR, in which case nothing is undefined, but you still get an undefined value that you could, for instance, return from a subroutine, assign to a variable, or pass as a parameter. Examples:
undef $foo;
undef $bar{'blurfl'}; # Compare to: delete $bar{'blurfl'};
undef @ary;
undef %hash;
undef &mysub;
undef *xyz; # destroys $xyz, @xyz, %xyz, &xyz, etc.
return (wantarray ? (undef, $errmsg) : undef) if $they_blew_it;
select undef, undef, undef, 0.25;
my ($x, $y, undef, $z) = foo(); # Ignore third value returned
Note that this is a unary operator, not a list operator.