En MSDOS no se hace la expansión de los argumentos que sí realiza el bash shell en Linux.
Cuando pones un '*' en la línea de comandos, bash shell, antes de ejecutar tu programa Perl, hace una 'expansión' de todos los ficheros que coincidan con ese patrón. En el caso de 'perl miprograma *.txt' lo convertirá en 'perl miprograma fichero1.txt fichero2.txt fichero99.txt otro_mas.txt etc.txt'.
Pero en MSDOS, no existe eso.
En Windows hay una librería llamada setargv.obj que hace esa labor. En el Perl ActiveState hay un programa que la implementa: perlglob.exe.
También le acompaña perlglob.bat, que es aún mejor. Los dos te devuelven los ficheros que coincidan con el patrón, separados con un nulo (\0). Por ejemplo:
- Código: Seleccionar todo
C:\Perl\bin>perlglob.bat *.pl
IISScriptMap.pl IISVirtualDir.pl SOAPsh.pl XMLRPCsh.pl config.pl configPPM3.pl plexalizer.pl stubmaker.pl tidyview.pl
Esto lo puedes insertar directamente en tu programa:
- Código: Seleccionar todo
C:\Perl\bin>perlglob *.pl| perl -le "foreach ( split qq(\0),<> ) { print }"
config.pl
configPPM3.pl
IISScriptMap.pl
IISVirtualDir.pl
plexalizer.pl
SOAPsh.pl
stubmaker.pl
tidyview.pl
XMLRPCsh.pl
Como ves, leemos la línea de la entrada estándar con '<>' y lo dividimos (split) por el carácter nulo (\0). Por cada uno de ellos (foreach), lo pintamos (print).
De todas formas, es mucho más recomendable que modifiques tu programa para que use el módulo File::DosGlob (ver también la página de manual de perlglob y la de
File::DosGlob).