Bueno, esto lo puedes hacer con un solo bucle.
Abres el archivo, lees la primera línea, donde están los nombres de las columnas, y las guardas en un array.
Luego, inicias un bucle hasta el final del archivo. Por cada línea, los separas por campos (con split()), y por cada elemento, haces la composición de las dos columnas que tienes que mostrar. Recorres los campos con un valor de índice, que usarás para acceder al elemento correspondiente en el primer array.
Es algo así (no probado):
Using perl Syntax Highlighting
use autodie;
open my $ARCHIVO, '<', $archivo;
my $linea = <$ARCHIVO>; # leer cabecera
chomp $linea;
my (undef, @nombres_valores) = split " ", $linea; # sacamos el nombre de las columnas, excepto la primera, que no nos interesa
while ($linea = <$ARCHIVO>) { # para el resto de líneas
chomp $linea;
my @campos = split " ", $linea; # dividimos (suponemos que no falta ninguna columna)
for my $i (1 .. $#campos) { # para todas las columnas, a partir de la segunda
print $nombres_valores[$i] . '_' . $campos[0] . " " . $campos[$i] . "\n";
}
}
close $ARCHIVO;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4