<>
, 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");