Recipe 1.3. Exchanging Values Without Using Temporary Variables
Author: Tom Christiansen & Nathan Torkington
Date: 1999-07-02T01:28:48Z

#

| Chapter 1 Strings |

## 1.3. Exchanging Values Without Using Temporary Variables

### Problem

You want to exchange the values of two scalar variables, but don't want to use a temporary variable.

### Solution

Use list assignment to reorder the variables.

    ($VAR1, $VAR2) = ($VAR2, $VAR1);

### Discussion

Most programming languages force you to use an intermediate step when swapping two variables' values:

    $temp    = $a;
    $a       = $b;
    $b       = $temp;

Not so in Perl. It tracks both sides of the assignment, guaranteeing that you don't accidentally clobber any of your values. This lets you eliminate the temporary variable:

    $a       = "alpha";
    $b       = "omega";
    ($a, $b) = ($b, $a);        # the first shall be last -- and versa vice

You can even exchange more than two variables at once:

    ($alpha, $beta, $production) = qw(January March August);
    # move beta       to alpha,
    # move production to beta,
    # move alpha      to production
    ($alpha, $beta, $production) = ($beta, $production, $alpha);

When this code finishes, `$alpha`, `$beta`, and `$production` have the values "`March`", "`August`", and "`January`".

### See Also

The section on "List value constructors" in perldata (1) and Chapter 2 of Programming Perl

1.2. Establishing a Default Value |  | 1.4. Converting Between ASCII Characters and Values