next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Typeglobs y eficiencia Sup: Typeglobs Ant: local y typeglobs Err: Si hallas una errata ...


Paso de filehandles como parámetros a una subrutina

Los ficheros (filehandles) no se pueden asignar o pasar como parámetros, esto es, es ilegal hacer:
open(F,"fich1");
open(G,"fich2");
F = G;
En los años A.R. (Antes de las Referencias) la alternativa era hacer una asignación de los typeglobs: *F = *G

Lo mismo ocurría para el paso de ficheros como parámetros de una función. Vea el siguiente ejemplo:

#!/usr/bin/perl -w
sub welcome {
  my $fh = shift;

  print $fh "Welcome ...\n";
}

open(FILE, ">test.txt");
$file = *FILE;
welcome($file);
close($file);

Es mas fácil usar el módulo IO::File

$ cat -n ./fileparameter3.pl
     1  #!/usr/bin/perl -w
     2
     3  use IO::File;
     4
     5  sub welcome {
     6    my $fh = shift;
     7
     8    print $fh "Welcome ...\n";
     9  }
    10
    11  $file = new IO::File "test.txt", "w";
    12  die "No pude abrir el fichero: $!" unless $file;
    13  welcome($file);
    14  $file->close;


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Typeglobs y eficiencia Sup: Typeglobs Ant: local y typeglobs Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21