Procesado de los Argumentos

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 directorio
La 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.html
La 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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19