next up previous contents
Next: System Variables Up: Variables Previous: Default Values   Contents


Assignments

Probably the most widely used operation in all of programming is the assignment statement. The assignment statement allows you to store the value of something in a variable so that it can be used later in your program. Like many languages, perl uses the equal sign (=) for assignments. In the usual case, you'll have a single variable on the left hand side of the equal sign, and some kind of expression on the right hand side; the value of the expresssion will be assigned to the variable. So a very simple example of an assignment statement would be
     $x = 7;

In perl, the result of an assignment statement is the value of the expression being assigned, which allows a few constructions which can save lots of typing. For example, if you wish to assign several variables the same value, it can be done on a single line:

     $i = $j = $k = 0;
A very common perl idiom is to perform an assignment, and then immediately use the assigned variable in another expression. To insure that perl does just what you want, the assignment statement is surrounded by parentheses. This allows you to copy a value to a variable, and modify it in a single step. For example, the increment operator (see Section 3.3) allows you to increase a variable's value by one, by appending it with two plus signs (++). The following example shows how you could copy the value of $x to $y, and simultaneously increment $y, without modifying $x:
     $x = 5;
     ($y = $x)++;
After these statements are carried out, $y will be equal to 6, but $x will still be equal to 5.

To assign values to a list, you can used a parenthesized list of comma-separated elements. For example, to create a list called @values with numeric values of 7, 19, 23 and 14, you could use

     @values = (7,19,23,14);
You can use a similar statement to assign values to selected elements of an array, by indexing the array to be assigned with an array (or literal list) representing the subscripts of the elements to wish you are assigning values. Thus, to changed elements 2 and 4 (that is, the third and fifth elements - remember perl uses zero-based arrays) of the @values array to 20 and 40 respectively, you could use either of the last two statements:
     @which = (2,4);
     @values[@which] = (20,40);
     @values[(2,4)] = (20,40);
If the list on the right-hand side contains a different number of elements than the expression on the left-hand side demands, perl will silently ignore the assignments for which no values are available, or values for which no assignment is specified.

Hashes can be assigned in exactly the same way as arrays, by alternating the hash's keys with its corresponding values in the left-hand side list. The only difference is that you assign the values to a hash, that is, a variable whose name begins with a percent sign (%).

     %sidekicks = ("laurel","hardy","batman","robin",
                   "abbott","costello");
Individual elements of the hash, which are scalars, can be accessed as follows:
     print $sidekicks{"laurel"};     # prints hardy
     print $sidekicks{"batman"};     # prints robin
An alternative approach, utilizing the => operator, allows you to specify the keys of a hash without using quotes:
    %sidekicks = (laurel => "hardy",batman => "robin",
                  abbott => "costello");
If any of the keys contain blanks or special characters, they will need to be enclosed in quotes, even when the => operator is used.

Another useful feature of the assignment statement in perl is the ability to assign several elements on the left hand side of an assignment when the expression on the right hand side returns an array. In its simplest form, you can use a list expression on either side of the equal sign:

     ($x,$y,$z) = (17,14,13)
$x will have the value 17, $y the value 14, and $z the value 13.

More commonly, a function which returns an array will appear on the right-hand side of the equal sign, and a parenthesized list to which the elements of the array will be assigned to appears on the left. For example, the split function (See Section 4.3) breaks up a string into ``words'', and returns the results in an array. To break a name into two pieces with split and assign the pieces to two variables at once, you could use the following statements:

     $name = "Dudley Doright";
     ($first,$last) = split(' ',$name);
would result in $first equal to ``Dudley'' and $second equal to ``Doright''. If any elements of the target list are lists themselves, the first one to appear will receive any remaining elements; the elements in the target list appearing after the first list will all be set to undef.
     $string = "one two three four five";
     ($a,$b,@rest) = split(' ',$string);
     ($x,@rest,$y,$z) = split(' ',$string);
In the first example, $a will be equal to ``one'', $b will be equal to ``two'', and @rest will be a list of length three, with elements ``three'', ``four'', and ``five''. In the second example $x will be equal to ``one'', @rest will be an array of length four containing the remainder of the the strings, while $y and $z will be undefined.


next up previous contents
Next: System Variables Up: Variables Previous: Default Values   Contents
Phil Spector 2002-10-18