Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > perl > Almacenar datos en archivos fuente

Almacenar datos en archivos fuente

Dentro de un archivo fuente Perl es posible almacenar datos accesibles como si de un archivo se tratase, mediante el uso del token _DATA_. Todo lo que aparezca tras una línea de este tipo no es considerado como archivo fuente y el intérprete lo ignora.

Para acceder a su contenido se utiliza el símbolo DATA, que se define automágicamente en el módulo, de forma similar a ésta:

    1 my $line = undef;
    2 
    3 while (<DATA>) {
    4     $line .= $_;
    5 }
    6 
    7 __DATA__
    8 Primera línea de datos
    9 Segunda línea de datos
   10 ...
   11 Enésima línea de datos

Hay que entender que el símbolo DATA hace referencia en realidad al símbolo PACKAGE::DATA y que, por tanto, es similar a STDOUT y STDIN, los cuales referencian los descriptores de archivos estándar para la entrada y la salida. Perl se encarga de conectarlos en el script.

Existe otro símbolo también usado para ésto, END, pero hace referencia únicamente al paquete principal puesto que es un alias para main::DATA. No se debe usar en los módulos porque en realidad no estaría haciendo referencia al módulo (al espacio de nombres del módulo más bien), sino al espacio de nombres principal main.

Otro ejemplo más:

    1 package MyPackage;
    2 
    3 use Pod::Parser;
    4 
    5 sub extract {
    6     my $parser = Pod::Parser->new();
    7 
    8     # Aquí vamos a leer en realidad de <MyPackage::DATA>
    9     return $parser->parse_from_filehandle(\*DATA);
   10 }
   11 
   12 __DATA__
   13 =head1 Mis funciones
   14 
   15 =head2 funcion1()
   16 
   17 =head2 funcion2()
   18 
   19 =cut
   20 
   21 package main;
   22 
   23 use MyPackage;
   24 
   25 MyPackage::extract();
   26 
   27 __END__
   28 =head1 Mi programa
   29 
   30 bla,bla,bla