El error está en que un while() no tiene nunca una parte else{}. Es un error de sintaxis grave.
Y si cambias el while() por if(), tendremos una estructura correcta (if(){}else{}) pero el problema está ahora en el uso del operador diamante (<>): no es correcto dentro de un if() o, al menos, diremos que lo más lógico es que aparezca dentro de un while() (leer mientras no se llegue al final de un archivo).
JF^DPerl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES