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:

my $line = undef;

while (<DATA>) {
    $line .= $_;
}

__DATA__
Primera línea de datos
Segunda línea de datos
...
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:

package MyPackage;

use Pod::Parser;

sub extract {
    my $parser = Pod::Parser->new();

    # Aquí vamos a leer en realidad de <MyPackage::DATA>
    return $parser->parse_from_filehandle(\*DATA);
}

__DATA__
=head1 Mis funciones

=head2 funcion1()

=head2 funcion2()

=cut

package main;

use MyPackage;

MyPackage::extract();

__END__
=head1 Mi programa

bla,bla,bla