Hallo Cruz!
$test=join("<br>",@lines);
Und siehe da... @lines ist nach diesem Algorithmus leer!
Woher weisst Du das? Vielleicht hat es ja jede Menge Elemente, die nur alle Nullstrings oder undef sind.
Du kannst mit scalar(@lines) die Anzahl der Elemente feststellen. Ist diese groesser 0 (am besten == der Anzahl der Zeilen Deiner DB), hast Du vermutlich keine \t in Deinen Daten, sodass beim split() das $line geleert wird.
Ist aber @lines wirklich leer, liegt der Fehler wohl woanders. Dann solltest Du vielleicht noch etwas mehr vom Source posten. @headers und $columns werden naemlich nirgendwo initialisiert.
So lange