my $hcfa = do "hcfa.lay"; my $layout = []; foreach my $line ( sort keys %$hcfa ) { foreach my $item ( @{$hcfa->{$line}} ) { insert_into_layout($layout, $line, $item->[0], "X" x $item->[1]); } } print layout_form($layout); sub insert_into_layout { my ($layout, $line, $row, $value) = @_; my @data = split //, $value; my $offset = 0; foreach ( @data ) { $layout->[$line][$row + $offset++] = $_; } } sub layout_form { my $layout = shift; my $output; foreach my $row (@$layout) { foreach my $val (@$row) { $output .= (defined $val ? $val : ' '); } $output .= "\n"; } return $output; }