my $array2d = [];
my @list = (split /,/,join (",",@array));
$array2d->[$_%3][int($_/3)]=$list[$_] for (0..$#list);
####
my @array2d = ();
my $c=0;
$array2d[$c%3][int($c++/3)]=$_ for (split /,/, join (",",@array));
####
#!/usr/bin/perl -w
use strict;
use Devel::Timer;
my $runcount=500;
my $t = new Devel::Timer();
my @array = ('nfs,7,rw',
'afp,12,rro',
'cifs,32,ro',
'dns,5,rw',
);
$t->mark('V1');
for my $runs (1..$runcount) {
my $cols = [];
foreach my $row (0..$#array) {
my @cols = split /,/, $array[$row];
map {$cols->[$_]->[$row] = $cols[$_]} (0..$#cols);
}
}
$t->mark('V2');
for my $runs (1..$runcount) {
my @splitted_up = ();
my $cnt = 0;
push @{ $splitted_up[($cnt ++) % 3] }, $_
foreach (split (/,/, join (",",@array)));
}
$t->mark('V3');
for my $runs (1..$runcount) {
my $array2d = [];
my @list = map {split /,/,$_}(@array);
$array2d->[$_%3][int($_/3)]=$list[$_] for (0..$#list);
}
$t->mark('V4');
for my $runs (1..$runcount) {
my @array2d = ();
my $c=0;
$array2d[$c%3][int($c++/3)]=$_ for (split /,/, join (",",@array));
}
$t->mark('V4 end');
$t->report();
####
Devel::Timer Report -- Total time: 0.1663 secs
Interval Time Percent
----------------------------------------------
01 -> 02 0.0530 31.87% V1 -> V2
03 -> 04 0.0443 26.65% V3 -> V4
04 -> 05 0.0370 22.24% V4 -> V4 end
02 -> 03 0.0319 19.15% V2 -> V3
00 -> 01 0.0002 0.09% INIT -> V1
####
push @{ $splitted_up[($cnt ++) % 3] }, $_
foreach (split (/,/, join (",",@array)));