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

Perl each Function



NEW!!!

Check my new resource:    Perl How To Tutorial eBooks



The Perl each function is used to iterate over the elements of an array or a hash.

The syntax forms of the each function are as follows:

each %hash
each @array

If you use it with a hash, it returns a two element list consisting of the key-value of the next pair element of the hash.

In the case of arrays, this function returns a two element list consisting of the next index and the value of the array element associated with it. Please note that using each with arrays is available starting with the Perl 5.12 version only.

Because the Perl each function doesn't loop by itself, you can wrap it in a while loop to access the elements of a hash or an array. The each function returns false when the end of the hash/array is reached.

The first example shows you how you can use the Perl each function to print the elements of a hash:

my %hash = qw(1 one 2 two 3 three 4 four);

while (my ($key, $val) = each %hash) {
  print("$key=>$val\n");
};

This code produces the following output:

4=>four
1=>one
3=>three
2=>two

The next example shows you how to print the index and the value of the elements of an array, using the Perl each function and the while loop:

# starting with Perl 5.12 
my @array = qw(one two three four);
while (my ($index, $value) = each @array) {
  print("$index, $value\n");
};

The output is as follows:

0, one
1, two
2, three
3, four

Using the Perl each with the while loop is very convenient when you need to traverse large arrays or a hashes (get one element at a time). When your aggregates are not so big, you can use the foreach statement to go through. In the case of hashes, you can iterate through the hash elements by using foreach and keys, as you can see in the following snippet:

foreach my $key (keys %hash) {
  print("$key => $hash{$key}\n");
};

In a Perl script, each hash or array has its own internal iterator, shared by all of the three functions: each, keys and values. When the each function will reach the end of the array or hash, this operator will be reset.

Stay assured that the iterator of a hash or array is reset before starting a while loop with each. The internal iterator can be explicitly reset by calling keys or values on a hash/array.

See an example here:

my %hash = qw(1 one 2 two 3 three 4 four);

my ($key, $val) = each %hash;
print "$key => $val\n";
# it prints 4 => four

($key, $val) = each %hash;
print "$key => $val\n";
# it prints 1 => one

# reset the iterator
keys %hash;

while (my ($key, $val) = each %hash) {
  print("$key=>$val, ");
};
# it prints 4=>four, 1=>one, 3=>three, 2=>two,

Well, the print examples are demonstrative only, if you run the above examples it's possible to print the hashes elements in a different order, because you couldn't expect at any order when you traverse a hash - this order can be different even between different runs of your script (because of Perl security reasons).


Check my new How To Tutorial eBooks (PDF format):

to see a lot of fully commented examples that help you use the Perl built-in functions in your scripts.






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
        List Functions
        Array Functions
        Hash Functions
        Miscellaneous Functions
    Functions in alphabetical order
        chomp
        chop
        chr
        crypt
        defined
        delete
        each
        grep
        hex
        index
        join
        lc
        lcfirst
        length
        map
        oct
        ord
        pack
        pop
        push
        q
        qq
        qw
        reverse
        rindex
        scalar
        shift
        sort
        splice
        split
        sprintf
        substr
        tr
        uc
        ucfirst
        undef
        unshift

return from Perl each Function to Perl Basics



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

Site Build It!