Pues... bastante mal...
Si los campos contienen caracteres de fin de línea, no se distinguen de los caracteres de fin de línea que separan registros.
Ahora bien... si dices que siempre son 11 campos... se podría intentar un apaño:
* leemos una línea y la añadimos a una variable temporal
* si la línea no contiene 11 campos, pasamos a la siguiente vuelta
* si tiene 11 campos, la procesamos y vaciamos la variable temporal
* repetimos para todo el archivo
* al final, procesamos el último registro que quede en la variable temporal, si lo hubiera.
También, lo que complica el problema, es la presencia de comas dentro de los mismos campos.
Hay módulos que permiten leer este tipo de archivos, como
Text::CSV.