It looks to me like you have your iterations over rows and columns ($z and $v) reversed. Maybe something like the following would work better.
use strict;
use warnings;
my @data;
while (<DATA>) {
chomp;
push(@data, [ split /,/ ]);
}
my $cols = $#{$data[0]};
my $rows = $#data;
foreach my $col (0..$cols) {
foreach my $row (0..$rows) {
print "$data[$row][$col],";
}
print "\n";
}
__DATA__
1.1,1.2,1.3,1.4,1.5
2.1,2.2,2.3,2.4,2.5
3.1,3.2,3.3,3.4,3.5
Are you sure every row has the same number of fields?