# A.4 Assignment

Scalar variables are assigned scalar values with an assignment operator (the equals sign) in an assignment statement:

`\$thousand = 1000;`

assigns the integer 1000, a scalar value, to the scalar variable \$thousand.

The assignment statement looks like an equal sign from elementary mathematics, but its meaning is different. The assignment statement is an instruction, not an assertion. It doesn't mean "\$thousand equals 1000." It means "store the scalar value 1000 into the scalar variable \$thousand". However, after the statement, the value of the scalar variable \$thousand is, indeed, equal to 1000.

References are usually saved in scalar variables. For example:

`\$pi = \3.14159265;`

If you try to print \$pi after this assignment, you get an indication that it's a reference to a scalar value at a memory location represented in hexadecimal digits. To print the value of a variable that's a reference to a scalar, precede its name with an additional dollar sign:

```print \$pi,"\n";
print \$\$pi, "\n";```

This gives the output:

```SCALAR(0x811d1bc)
3.14159265```

You can assign values to several scalar variables by surrounding variables and values in parentheses and separating them by commas, thus making lists:

`(\$one, \$two, \$three) = ( 1, 2, 3);`

There are several assignment operators besides = that are shorthand for longer expressions. For instance, \$a += \$b is equivalent to \$a = \$a + \$b. Table A-1 is a complete list.

##### Table A-1. Assignment operator shorthands

Example of operator

Equivalent

\$a += \$b

\$a = \$a + \$b

(addition)

\$a -= \$b

\$a = \$a - \$b

(subtraction)

\$a *= \$b

\$a = \$a * \$b

(multiplication)

\$a /= \$b

\$a = \$a / \$b

(division)

\$a **= \$b

\$a = \$a ** \$b

(exponentiation)

\$a %= \$b

\$a = \$a % \$b

(remainder of \$a / \$b)

\$a x= \$b

\$a = \$a x \$b

(string \$a repeated \$b times)

\$a &= \$b

\$a = \$a & \$b

(bitwise AND)

\$a |= \$b

\$a = \$a | \$b

(bitwise OR)

\$a ^= \$b

\$a = \$a ^ \$b

(bitwise XOR)

\$a >>= \$b

\$a = \$a >> \$b

(\$a shift \$b bits)

\$a <<= \$b

\$a = \$a >> \$b

(\$a shift \$b bits to left)

\$a &&= \$b

\$a = \$a && \$b

(logical AND)

\$a ||= \$b

\$a = \$a || \$b

(logical OR)

\$a .= \$b

\$a = \$a . \$b

(append string \$b to \$a)  Foreword  Preface  Part I: Object-Oriented Programming in Perl  Part II: Perl and Bioinformatics  Part III: Appendixes  Appendix A. Perl Summary  A.1 Command Interpretation  A.2 Comments  A.3 Scalar Values and Scalar Variables  A.4 Assignment  A.5 Statements and Blocks  A.6 Arrays  A.7 Hashes  A.8 Complex Data Structures  A.9 Operators  A.10 Operator Precedence  A.11 Basic Operators  A.12 Conditionals and Logical Operators  A.13 Binding Operators  A.14 Loops  A.15 Input/Output  A.16 Regular Expressions  A.17 Scalar and List Context  A.18 Subroutines  A.19 Modules and Packages  A.20 Object-Oriented Programming  A.21 Built-in Functions  Appendix B. Installing Perl  Colophon