Sí, sí que se entiende.
En realidad te puedes ahorrar la primera consulta para saber el espacio que necesitas reservar.
Perl incrementa de forma automática el tamaño de los array a medida que vamos metiendo elementos (con push() o unshift()).
Entonces, una forma sencilla de hacerlo sería:
- vamos leyendo registro por registro
- según el tipo de registro, lo metemos con push() en un array distinto (suponemos que trabajamos con pocas columnas)
- al final, con scalar(@array) puedes saber el "tamaño" de @array, y de ahí deduces el mayor, y de ahí, lo puedes rellenar con valores nulos.
- presentación
Hay otras formas... Con módulos como
Text::Table se puede trabajar con datos en forma de tablas.
Mis soluciones propuestas intentan hacer la salida de forma inmediata, es decir, sacar la información en cuanto sea posible, sin esperar a leer toda la información a memoria.