http://www.perlmonks.org?node_id=467792


in reply to swap columns in a 2-dim array

If you know there's going to be a large number of swaps, why not make a set of array subscripts and swap those around, then output in whatever the final order is?
use strict; use warnings; my (@nums, @index, $x, $y); # CREATE MATRIX push @nums, [1..12] for 1..12; # CREATE INDEX @index = (0..11); # PERFORM RANDOM SWAPS for (1..20) { $x = int rand 12; $y = int rand 12; swap(\@index, $x, $y); } # OUTPUT IN FINAL ORDER for $x (0..$#nums) { print $nums[$y][$_].' ' for (@index); print "\n"; } sub swap { my ($p, $x, $y) = @_; my $t = $p->[$y]; $p->[$y] = $p->[$x]; $p->[$x] = $t; }