use List::Util qw( shuffle ); my @data = map { [$_, undef] } qw( v1 v2 v3 v4 v5 ); my @shuf = shuffle 0..$#data; my @tab = map { [$data[$_][0], $shuf[$_]] } 0..$#data; use Data::Dumper; print Data::Dumper->Dump([\@data, \@tab], [qw(*data *tab)]);