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