Home
Perl How To
Perl Books
Perl Basics
Perl Editors
Perl Modules
Perl Database
Net Programming
Sitemap
About Me
Contact Me
Blog
 

Perl undef Function



NEW!!!

Check my new resource:    Perl How To Tutorial eBooks



Perl undef function returns an undefined value, freeing up the memory used by the variable arguments passed to it. You can use this function with scalars, lists or arrays, hashes, functions or typeglobs. In this short free tutorial I’ll show you some opportunities about using this built-in function in your Perl scripts.

For this function two syntax forms are available, as shown below:

undef EXPR
undef

When you declare for first time a variable in Perl without assigning any value to it, Perl will assign by default the undef value to it. If you forget to assign any value to a variable declared in a Perl script, there are chances that your script will not crash if you will run it. But if you’ll use warnings, Perl will always warn you if you have unassigned variables in your script. It’s a good habit to use warnings because all your typos will have the undef value assigned and Perl will warn you about them.

You can omit the expression when you use undef and in this case undef is a lvalue, the undefined value being a special data type, a special case of a scalar value. If you’ll use it without EXPR, undef will return the undefined value.

For numeric scalar variables the undef value is 0, meanwhile for string variables it indicates an empty string. To distinguish between 0 / empty strings and the undef value, Perl provides the defined function that allows you to check up if a variable has the undef value or not.

Next, I’ll show you some ways to use this function.

How to use Perl undef function with scalars


See the following snippet code:

# declare a scalar variable without initializing it
$var1;
# declare a scalar variable and assign a value to it
$var2 = "Perl undef function";
print "var1 undefined\n" unless defined $var1;
print "var2 defined\n" if defined $var2;

# free resource for $var2 and make it undefined
undef $var2;
print "var2 undefined\n" unless defined $var2;

and the output for this code:

var1 undefined
var2 defined
var2 undefined

How to use Perl undef function with arrays


If you want to free up the memory resources occupied by a big array, you can use the undef function like in the following lines of code:

@array = <STDIN>;
# perform some actions with the array’s elements
# …

# free the memory where the array was stored
undef (@array);
print "\@array is undefined\n" unless defined(@array);

In the above code, we read from standard input some lines of data and we store them in the @array. After performing some tasks against the elements of the array, we free up the memory usage by that array variable. If you execute this code, finally the message: "@array is undefined" will be printed. However, please note that if you have a multidimensional array, which has some references to other structures, it is not enough to free the initial array only. To illustrate, please see the next code:

# declare and initialize some arrays
@array1 = qw(1 2 3 4);
@array2 = qw(5 6 7 8);
# define a reference for the second array
$ref2 = \@array2;
# append the reference o the first array
push @array1, $ref2;

# free the memory usage by @array1;
undef (@array1);
print "\@array2 still available: @array2\n";
# it displays: @array2 still available: 5 6 7 8

If you want to free the usage memory for an array and for all its references too, you must consider to step down in a recursive way through all the array references and free the usage memory until no more references are found. To see if an element of an array is a reference to some other data type structure, you can use the ref function, something like in the next lines of code:

use warnings;

@array1 = qw(1 2);
@array2 = qw(3 4);
$array1[2] = \@array2;

for($i=0; $i<scalar (@array1); $i++)
{
  if(ref $array1[$i] eq "") {
    print "$i: NO REFERENCE\\\\n";
  } elsif (ref $array1[$i] eq "ARRAY") {
    print "$i: ARRAY\n";
  }
}    

and the output:

0: NO REFERENCE
1: NO REFERENCE
2: ARRAY

You can use undef against certain elements of an array:

use warnings;

@array = qw(1 2 3);
undef $array[1];
print "array size = ",scalar @array, "\n";
# displays: array size = 3

The second element of the array will have the undef value, but the dimension of the array doesn’t change.

How to use Perl undef function with hashes


The below code will show you how to use Perl undef upon an entire hash (free up the memory usage by it) or to undef certain elements of the hash. If you want to delete an entry from a hash, you must use the delete function instead. Using Perl undef with a $key element of a hash (using either undef $hash{$key} or $hash{$key} = undef) will only have as effect to undefine the respective value associated with the $key. The following code speaks by itself:

#define a hash and assign some elements to it
%hash = (1 => "one",   2 => "two", 
         3 => "three", 4 => "four");

# undef the value of the elemnt with the key 2
undef $hash{2};

# undef the value of the elemnt with the key 3
$hash{3} = undef;

# delete the element with the value 4
delete $hash{4};

#undef the entire hash
undef %hash;

How to use Perl undef function with subroutines


There are cases when you want to write a subroutine that returns an undef value if some errors happen. The next example will show you how to return undef if you divide some numbers by 0.

sub divSub {
  local ($n, $k) = @_;
    return ($k == 0 ? undef : $n / $k);
}

($n, $k) = (25, 0);
# divide $n by $k
print  "Can\'t divide by 0\n" unless defined divSub($n, $k);
# it displays: Can't divide by 0





NEW!!!

Do you want more information about the basic Perl topics?

Check my new "Perl How To" Tutorial eBooks page where I'll answer the most frequent questions regarding some topics :


Perl How To Tutorial eBooks


Table of Contents:

A Perl Script
Install Perl
Running Perl
Perl Data Types
Perl Variables
Perl Operators
Perl Lists
Perl Arrays
    Array Size
    Array Length
Perl Hashes
Perl Statements
    Perl if
    Perl unless
    Perl switch
    Perl while
    Perl do-while
    Perl until
    Perl do-until
    Perl for
    Perl foreach
Built-in Perl Functions
    Functions by Category
        String Functions
        Array Functions
    Functions in alphabetical order
        chomp
        chop
        chr
        crypt
        defined
        grep
        hex
        index
        join
        lc
        lcfirst
        length
        oct
        ord
        pack
        pop
        push
        reverse
        rindex
        shift
        split
        substr
        uc
        undef
        unshift

return from Perl undef Function to Perl Basics



Would you like to create your own website like this one?
Hit the Alarm Clock!

Site Build It!


footer for Perl undef page