Pues... audax no ha acertado
Cambia la línea 27, de
print "$File::Find::name\n"
a
print "$NUMERO_FACTURA $File::Find::name\n"
y te llevarás una sorpresa. Verás que $NUMERO_FACTURA no cambia en cada vuelta del while(). Aunque estás cambiando la variable en la línea 19, no cambia dentro de la línea 25. ¿Por qué? Pues porque la definición de la subrutina buscar() solo sucede una vez, la primera vez que Perl se la encuentra. Como $NUMERO_FACTURA vale '1010', y está declarada dentro del propio bucle while (es local en ese ámbito), pues queda así para el resto del programa.
Hay varias soluciones. Una de ellas es declarar $NUMERO_FACTURA como variable global, fuera del bucle:
my $NUMERO_FACTURA;
while (...) {
# lo demás, igual
}
Hay otros problemas... @rowI[0] es incorrecto. Aunque te está funcionando, la forma correcta es $rowI[0], ya que lo que queremos ahí es recuperar
un solo valor, y de ahí hace falta cambiar el '@' por un '$'. Si no, estarás ejecutando una sentencia en contexto de lista, y te puede llevar a sorpresas, en el futuro.
Yo no usaría el módulo File::Find. Si sé, más o menos, cómo se llama el archivo que busco, y sé el directorio dónde buscar, pues es fácil resolverlo.
Using perl Syntax Highlighting
#!/usr/bin/env perl
use v5.14;
use autodie;
use DBI;
my $database = "FACTURAS";
my $data_source = "DBI:mysql:$database;" ;
my $username = "usuariodb";
my $password = "db2016";
my $DIR = "PDF/IN";
my $dbh = DBI->connect($data_source, $username, $password)
or die "Couldn't connect to database: " . DBI->errstr;
my $sth = $dbh->prepare ("SELECT fac_numero FROM Factura")
or die $dbh->errstr();
$sth->execute()
or die $sth->errstr();
while (my @rowI = $sth->fetchrow_array) {
my $NUMERO_FACTURA = $rowI[0];
# recorremos todos los archivos que coinciden con el patrón
for my $archivo (glob "$DIR/*$NUMERO_FACTURA.pdf") {
say "$NUMERO_FACTURA:$archivo";
}
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
glob() permite usar comodines como los del
shell, así que solo tenemos que buscar por "*$NUMERO_FACTURA.pdf", y listo.