¿Seguro que es en esas líneas donde se produce la división por cero? No creo... No veo nada raro... salvo que... ¿qué valor tiene $dnafilename la
primera vez que entra en el bucle, en la primera condición? A lo peor, no tiene ningún valor, y por eso da ese error.
Y luego, después de leer el nombre de archivo desde el teclado, no le quitas los caracteres de fin de línea, con chomp(), aunque no esto no es importante: al usar la versión de open() de dos argumentos, Perl quita de forma automática los caracteres de espacio que estén por delante o por detrás del nombre.
Prueba con esto:
Using perl Syntax Highlighting
my $dnafilename;
do {
print "Introduzca el nombre del archivo a procesar (FIN para terminar): ";
chomp($dnafilename = readline);
exit if $dnafilename eq 'FIN';
unless (open DNAFILE, $dnafilename) {
print "ERROR: No puedo abrir [$dnafilename]: $!\n"; # informamos del error
$dnafilename = ''; # obligamos a repetir el bucle
}
} until $dnafilename; # repetimos hasta que tengamos un archivo bien abierto
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4