"Perl for Perl Newbies" - Part 1ArraysBuilt-In Array Functions

9.4. Built-In Array Functions

push

The pushfunction appends an element or an entire array to the end of an array variable. The syntax is push @array_to_append_to, @array_to_appendor push @array, $elem1. For example, the primes program from earlier could be written as:

# Put 2 as the first prime so we won't have an empty array,
# what might confuse the interpreter
@primes = (
2);

MAIN_LOOP:
for
$number_to_check (
3 ..
200)
{

foreach
$p (
@primes)
    {

if (
$number_to_check %
$p ==
0)
        {

next MAIN_LOOP;
        }
    }


# If we reached this point it means $number_to_check is not

# divisible by any prime number that came before it.

push
@primes,
$number_to_check;
}

foreach
$p (
@primes)
{

print
$p,
", ";
}
print
"
\n
";

Notice that pushis equivalent to typing @array = (@array, $extra_elem), but it is recommended to use it, because it minimises error and it executes faster.

pop

popextracts the last element from an array and returns it. Here's a short example to demonstrate it:

# This program prints the numbers from 10 down to 1.
@numbers = (
1 ..
10);
while(
scalar(
@numbers) >
0)
{

$i =
pop(
@numbers);

print
$i,
"
\n
";
}

shift

shiftextracts the firstelement of an array and returns it. The array will be changed to contain only the elements that were present there previously, with the 1 to scalar(@array)-1indexes.

Here's the above example, while using shiftinstead of pop:

# This program prints the numbers 1 to 10.
@numbers = (
1 ..
10);
while(
scalar(
@numbers) >
0)
{

$i =
shift(
@numbers);

print
$i,
"
\n
";
}

join

The syntax is join($separator, @array)and what it does is concatenates the elements of @arraywhile putting $separatorin between. Here's an example:

@myarray = (
"One fish",
"Two fish",
"Red Fish",
"Blue Fish");

print
join(
"
\n
",
@myarray),
"
\n
";

reverse

The reversefunction returns the array which contains the elements of the array passed to it as argument in reverse. Here's an example:

print
"Enter some lines:
\n
";

$line = <>;
chomp(
$line);
while (
$line)
{

push
@mylines,
$line;

$line = <>;

chomp(
$line);
}

print
"Your lines in reverse are:
\n
",
join(
"
\n
",
reverse(
@mylines)),
"
\n
";

Note that by typing scalar(reverse($scalar))you get the string that contains the characters of $scalarin reverse. scalar(reverse(@array))concatenates the array into one string and then reverses its characters.


Written by Shlomi Fish