Cosas que he visto...
* Líneas 5 y 6: no necesitas activar los warnings y el strict, porque de ello ya se encarga el módulo Modern::Perl
* Línea 117: está mal escrita el nombre de la subrutina crearTabla()
* Si, suponemos, que hemos usado el módulo ConectarDB para realizar la conexión a la base de datos, es normal pasar la variable $dbh a todas las subrutinas que van a necesitar conectarse a la base de datos. Es una forma de programar en la que las subrutinas reciben toda la información desde fuera, y no dependen del valor de variables globales. Eso sí, lo de leer $_[1] o $_[3], es fatal... debes pasarle a las subrutinas solo los valores que va a necesitar, y nada más. Y dentro de la subrutina, leer todos los parámetros (si queda alguno sin pasar, es que se ha escrito mal la llamada a la subrutina). Por ejemplo, en la línea 21 se llama
$dbh = $_[1]; ¿Qué ha pasado con $_[0]?
* En el while de la 46 a la 52, estás leyendo todas las líneas devueltas por la consulta. Y quieres salir en cuanto encuentres algo específico. En Perl, una forma de "romper" y "salir inmediatamente" de un bucle es con el comando
last. Así que no te hace falta poner ninguna variable semáforo para saber cuándo debes salir.
Una cosa: la línea 48 está mal escrita: has puesto '=', indicando una asignación. Querrás poner un '==' (comparador de igualdad numérico) o un 'eq' (comparador de igualdad de cadena de caracteres).
Quedaría así:
Using perl Syntax Highlighting
while (my $ref = $sth->fetchrow_hashref()) {
if ( $_[0] eq $ref->{'palabra'}){
$sth->finish();
return 1;
}
}
$sth->finish();
return 0;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
* Línea 60. No entiendo por qué preguntas si deberías devolver el valor de $dbh. ¿Por qué va a devolver una subrutina un valor que ya recibe como argumento? Se supone que si alguien llama a la subrutina con ese parámetro, lo seguirá sabiendo cuando regrese de la subrutina...
* Mi código presenta las bases de datos, conectándose a la base de datos MySQL a través de una conexión TCP. Es posible que tu motor MySQL no tenga activada esa posibilidad.
* Estás usando el módulo Spreadsheet::XLSX, pero no el Spreadsheet::Read, así que te sobra la línea 3.
* Línea 133 sobra, porque está repetida en la 137 (declaración de la variable $cell2.
* Línea 137: estás decrementando el valor del $col, que es incompatible con el hecho de que es una variable controladora de bucle (línea 129), así que me temo que estás provocando un bucle infinito.
No he mirado más, sobre todo la parte de la lógica de programa a partir de la línea 139.