#! perl -slw use strict; use Data::Dumper; sub shuffleRefs (\@) { my $r=pop; $a = $_ + rand @{$r} - $_ and (${$r->[$_]}, ${$r->[$a]}) = (${$r->[$a]}, ${$r->[$_]}) for (0..$#{$r}); } sub shuffle2d { my @refs; push @refs, \( @$_ ) for @_; shuffleRefs @refs; return @refs; } my @data2d = ( [ qw[a b c d e] ], [ qw[1 2 3] ], [ qw[A B C] ], [ qw[I II III IV] ] ); print "@$_" for @data2d; shuffle2d @data2d; print ''; print "@$_" for @data2d; __END__ C:\test>temp a b c d e 1 2 3 A B C I II III IV 1 a b e II d I c 2 C III A B 3 IV C:\test>