Sí, hemos metido la pata.
isdigit() solo devuelve verdadero si el argumento es un entero. Mejor dicho: solo devuelve verdadero si el argumento es un carácter entre '0' y '9', incluidos (más información en man 3 isdigit).
Entonces... lo podemos resolver de otra manera, por medio de una expresión regular.
Eliminamos la línea 2 y cambiamos la 41 por
Using perl Syntax Highlighting
$dato = 'NaN' if $dato !~ /^[\d.,+-e]+$/i;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Así, miramos a ver que $dato coincida con ese patrón (dígitos, '.', ',', '-', '+', y 'e' -exponente-). Si no es así, lo marcamos como NaN.
Si te falla porque hay algunas celdas con espacios en blanco, se puede hacer un $dato += 0; para pasarlo a número, antes de lo del NaN.
O de otra manera: si sospechamos que la celda puede tener espacios en blanco o caracteres extraños aparte de los números, se pueden extraer con un expresión regular, y comprobarlo después:
Using perl Syntax Highlighting
my($dato) = $HOJA->[$columna]->[$fila] =~ /^([\d.,+-e]+)$/i;
$dato = 'NaN' if not $dato;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4