How do I perform an operation on a series of integers?

To call a function on each element in an array, and collect the results, use:

    @results = map { my_func($_) } @array;
For example:

    @triple = map { 3 * $_ } @single;
To call a function on each element of an array, but ignore the results:

    foreach $iterator (@array) {
        some_func($iterator);
    }
To call a function on each integer in a (small) range, you can use:

    @results = map { some_func($_) } (5 .. 25);
but you should be aware that the .. operator creates an array of all integers in the range. This can take a lot of memory for large ranges. Instead use:

    @results = ();
    for ($i=5; $i < 500_005; $i++) {
        push(@results, some_func($i));
    }
This situation has been fixed in Perl5.005. Use of .. in a for loop will iterate over the range, without creating the entire range.

    for my $i (5 .. 500_005) {
        push(@results, some_func($i));
    }
will not create a list of 500,000 integers.
Back to perlfaq4