use strict; use warnings; my ($x, $y) = (0,0); #table axes, x is horizontal, y is vertical my ($max_x, $max_y) = (0,0); my $table ; #hash of arrays while () { chomp; #print "$_\n"; if ( $_ =~ m/^v_(.*)\s*{/ ) { $y = 0; } elsif ( $_ =~ m/^}$/ ) { $max_x = $x if $x++ > $max_x; } else { $table->[$x]->[$y] = $_; $max_y = $y if $y++ > $max_y; } } for my $y (0..$max_y) { for my $x (0..$max_x) { my $item = defined( $table->[$x]->[$y] ) ? $table->[$x]->[$y] : ' '; print "$item "; } print "\n"; } __DATA__ v_x { x1 x2 x3 x4 x5 x6 x7 x8 } v_y { y1 y2 y3 y4 y5 } v_z { z1 z2 z3 z4 z5 z6 }