my @x; my $curr = ''; my @curr; foreach my $ref (@$matrix_ref) { my $k = $ref->[0] . $ref->[1]; unless ($curr eq $k) { push @x, [ @curr ] if @curr; @curr = @$ref; $curr = $k; next; } push @curr, $ref->[2]; } push @x, [ @curr ]; use CGI qw( :all ); $html_str = table( map { Tr( td( $_ ) ) } @x );