Very basic hack:
use strict;
use warnings;
my ($delim, $row, $col, $val, %matrix, %cols, @rows, @cols) = ' ';
while (<DATA>) {
chomp;
($row, $col, $val) = split /, /, $_;
$matrix{$row}{$col} = $val;
$cols{$col} = ();
}
@cols = sort keys %cols;
@rows = sort keys %matrix;
print join $delim, ' ', @cols;
for $row (@rows) {
print "\n", $row;
for $col (@cols) {
print $delim, $matrix{$row}{$col} ? sprintf('%3d', $matrix{$ro
+w}{$col}) : ' -';
}
}
__DATA__
ob1, ob2, 34
ob1, ob3, 56
ob1, ob4, 12
ob1, ob5, 78
ob1, ob6, 23
ob3, ob1, 56
ob7, ob1, 23
ob8, ob1, 12
ob9, ob1, 90