next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Enumerar Ficheros Sup: Entrada /Salida Ant: Entrada /Salida Err: Si hallas una errata ...


El operador diamante

El operador diamante, denotado por <>, es un operador de entrada. Toma la entrada desde los ficheros cuyos nombres han sido pasados al programa en la línea de comandos:
>./miprog datos.dat file.txt x.log

el operador diamante, cuando sea llamado desde miprog tomara la entrada desde datos.dat, file.txt y x.log. Si el programa se llama sin argumentos leera desde la entrada estándar.

Se puede usar el guión corto como sinónimo de leer desde la entrada estándar. Veamos el siguiente programa:

$ cat diamond.pl
#!/usr/bin/perl -w
my $n;
while (<>) {
  printf("%2d %s", $n++, $_);
}
Lo ejecutamos:
> diamond.pl tan.pl - useswitch.pl
 0 #!/usr/bin/perl -w
 1 #use strict;
 2
 3 print tan(3.1415);
Esto fue escrito por el usuario
 4 Esto fue escrito por el usuario
 5 #!/usr/local/bin/perl5.8.0 -w
 6
 7 use Switch;
 8
 9 $val = shift;
10
11 switch ($val) {
12   case 1 { print "number 1\n" }
13   case "hello" { print "string hello\n" }
14   else { print " none of these two\n" }
15 }
Después de imprimir el fichero tan.pl la ejecución se detiene para esperar entrada desde STDIN. La línea anterior a la 4 fué escrita por el usuario. Después se muestran los contenidos del fichero useswitch.pl.

El operador diamante utiliza el array @ARGV el cual contiene la lista de argumentos pasados al programa en la línea de comandos. Cuandose usa el operador shift fuera de una subrutina, actúa por defecto sobre este array. Si al comienzo de nuestro programa modificamos el array @ARGV podemos alterar la conducta del operador diamante. El ejemplo que vemos a continuación modifica @ARGV de manera que el programa hará caso omiso de los argumentos pasados por el usuario.

> cat diamond2.pl
#!/usr/local/bin/perl5.8.0 -w

@ARGV = qw#min.pl jump.pl#;
my $n = 0;
while (<>) {
  print $n++." $_";
}
Veamos un ejemplo de ejecución:
> diamond2.pl tan.pl - useswitch.pl
0 #!/usr/bin/perl -w
1
2 sub min {
3   my $a = shift; # igual que shift @_
4   my $b = shift;
5   ($a < $b)? $a : $b
6 }
7
8 print min(4,9)."\n";
9 print min(5,2)."\n";
10 #!/usr/bin/perl -w -I. -IModexample
11 use Modexample::Hops qw(one two);
12
13 $row = Modexample::Hops::hop_along 1, 5, 1;
14 while ($row->($r)) {
15   $col = Modexample::Hops::hop_along 1, 5, 1;
16   while ($col->($c)) {
17     print("($r, $c)\t");
18   }
19   print "\n";
20 }
21
22 Modexample::Hops::noexisto("pepe", "eowyn", "eomer", "maria");



Subsecciones
next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Práctica: Enumerar Ficheros Sup: Entrada /Salida Ant: Entrada /Salida Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21