Veamos el procesado de la línea de comandos:
lhp@nereida:~/Lperl/src/cookbook/ch16$ cat -n /usr/bin/rename
1 #!/usr/bin/perl -w
.. ... # comments
32 use strict;
33
34 use Getopt::Long;
35 Getopt::Long::Configure('bundling');
36
37 my ($verbose, $no_act, $force, $op);
38
39 die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n"
40 unless GetOptions(
41 'v|verbose' => \$verbose,
42 'n|no-act' => \$no_act,
43 'f|force' => \$force,
44 ) and $op = shift;
El uso de GetOptions significa que podemos llamar al programa de la forma:
$ rename -n 's/1628/chuchu/' node-1628.html node-1628.html renamed as node-chuchu.html $ ls -l *chuchu* ls: *chuchu*: No existe el fichero o el directorioLa opción
-n hace que la ejecución sea ''simulada''
$ rename -no 's/1628/chuchu/' node-1628.html Unknown option: o Usage: rename [-v] [-n] [-f] perlexpr [filenames]
La llamada Getopt::Long::Configure('bundling')hace
que sea posible juntar varias opciones. Por ejemplo, si
a, v y x son opciones válidas, entonces
un agrupamiento como -vax activa las tres.
Como se ha usado bundling, -no es sinónimo
de -n -o. Si se quieren usar prefijos o nombres completos
se debe usar el formato largo con dos guiones:
$ rename --no-act 's/1628/chuchu/' node-1628.html node-1628.html renamed as node-chuchu.htmlLa presencia de la opción
n o de --no-act
hace que la variable $no_act
se inicia a verdadero.
La función GetOptions retorna falso si se produjo un error
procesando la línea de comandos. Los argumentos no procesados,
aquellos que no se corresponden a las opciones descritas en la llamada
permancen en @ARGV.
Véase la documentación del módulo Getopt::Long para los detalles.
Si $no_act se adopta el modo $verbose:
46 $verbose++ if $no_act;
Si no se proveen ficheros se leen desde STDIN:
48 if (!@ARGV) {
49 print "reading filenames from STDIN\n" if $verbose;
50 @ARGV = <STDIN>;
51 chop(@ARGV);
52 }
Casiano Rodríguez León
