Soy un noob.I necesitan algunos conocimientos básicos sobre cómo los datos deben ser guardados y leen bajo el Perl. Diga que guarde un hash y una matriz. ¿Qué formato (extensión) del archivo debería usarse? ¿TXT? Hasta el momento sólo puedo guardar todas las cosas como cadena print FILE %hash
y leer de nuevo como cadena print <FILE>
. ¿Qué debo hacer si necesito el hash de funciones y las entradas de matriz de un archivo? ¿Cómo volver a ponerlos en hash y array?tienda y leer hash y matriz en archivos en Perl
Respuesta
Usted está buscando los datos serialización. Las opciones más populares que son robustos son Sereal, JSON::XS y YAML::XS. formatos menos conocidos son: ASN.1, Avro, BERT, BSON, CBOR, JSYNC, MessagePack, Protocol Buffers, Thrift.
Otras opciones son a menudo mencionados Storable y Data::Dumper (o similar)/eval
, pero no se recomiendan porque el formato de almacenable es la versión de Perl dependiente y eval
es insegura, ya que ejecuta código arbitrario. A partir de 2012, la contraparte de análisis Data::Undump no ha avanzado mucho. Tampoco puedo recomendar el uso de XML porque no mapea bien los tipos de datos Perl, y existen múltiples esquemas competitivos/incompatibles sobre cómo traducir entre XML y datos.
Ejemplos de código (probado):
use JSON::XS qw(encode_json decode_json);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $json = encode_json \%hash;
write_file('dump.json', { binmode => ':raw' }, $json);
}
{
my $json = read_file('dump.json', { binmode => ':raw' });
%hash = %{ decode_json $json };
}
use YAML::XS qw(Load Dump);
use File::Slurp qw(read_file write_file);
my %hash;
{
my $yaml = Dump \%hash;
write_file('dump.yml', { binmode => ':raw' }, $yaml);
}
{
my $yaml = read_file('dump.yml', { binmode => ':raw' });
%hash = %{ Load $yaml };
}
El siguiente paso después de aquí es object persistence.
Lea también: Serializers for Perl: when to use what
Bonita publicación, daxim. +1. Mucho, mucho apreciable. :) – verisimilitude
excelentes recursos. Gracias. –
Perlmonks tiene dos buenas discusiones sobre la serialización.
Esto realmente depende de cómo desea almacenar los datos en el archivo. Trataré de escribir un código de perl básico para que pueda leer un archivo en una matriz o escribir un hash en un archivo.
#Load a file into a hash.
#My Text file has the following format.
#field1=value1
#field2=value2
#<FILE1> is an opens a sample txt file in read-only mode.
my %hash;
while (<FILE1>)
{
chomp;
my ($key, $val) = split /=/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
Sí. usar un módulo de CPAN existente sería más apropiado que código sin procesar. – verisimilitude
Lo siento. Quise publicarlo como un comentario allí. – verisimilitude
Interesante y útil. Este enfoque tiene valor en algunos entornos donde los módulos no son fáciles de instalar. Estoy de acuerdo en que un enfoque preferido sería usar Data :: Dumper (que ha avanzado mucho en los últimos años) u otro módulo. –
Si acabo nueva sugieres hacer a la cadena de la matriz/hash con join() y lo escriben con "imprimir" y luego leer y usar split() para hacer arsenal/hash de nuevo. Esa sería una manera más simple como el ejemplo de libro de texto de enseñanza de Perl.
y cuáles serían las desventajas? –
Puede ser difícil lidiar con algo aún más complicado que las matrices o hashes (por ejemplo, matrices multidimensionales). –
- 1. ¿Cómo puedo leer y manipular archivos PDF 1.5 en Perl?
- 2. Perl, convertir hash a matriz
- 3. PHP cómo stringify matriz y tienda en la galleta
- 4. Constantes hash en Perl
- 5. Leer y escribir archivos binarios en VBScript
- 6. Java - leer, manipular y escribir archivos WAV
- 7. ¿Cómo convierto una matriz a un hash en Perl?
- 8. ¿Cómo leer y escribir desde una tubería en Perl?
- 9. Abrir archivo para leer y escribir (no anexar) en perl
- 10. ¿Cómo puedo leer archivos de Excel en Perl?
- 11. matriz híbrida y hash de Lua; ¿existe en otro lugar?
- 12. Distinguir entre matriz y de hash en javascript con typeof()
- 13. ¿Cuál es la diferencia entre una referencia hash y hash en Perl?
- 14. hash de construcción dinámica/recursiva en Perl?
- 15. Perl hash Data :: Dumper
- 16. Hash de Perl cuando las claves y los valores son referencias de matriz
- 17. Perl: leer el archivo de texto web y "abrirlo"
- 18. Leer archivo en matriz
- 19. ¿Cómo leer y escribir varios archivos?
- 20. PHP leer y escribir archivos de JSON
- 21. en Perl y PHP
- 22. ¿Cómo leer y escribir archivos xml?
- 23. ¿Cómo puedo leer archivos .xlsx y .xls en Java?
- 24. Forma recomendada para leer y escribir archivos .ini en VBA
- 25. SDK para leer archivos PPT, xls y .doc en iOS
- 26. Escribir y leer archivos de texto en el iPhone
- 27. ordenar una matriz de Hash de múltiples teclas Perl
- 28. ¿Cómo puedo leer recursivamente directorios en Perl?
- 29. Perl ¿Cómo recupero una matriz de un hash de matrices?
- 30. Leer (y escribir) archivos RTF con C++/Qt
Check-out módulos tales como [almacenable] (http://search.cpan.org/perldoc?Storable) o [Data :: Dumper] (http://search.cpan.org/perldoc?Data: : Dumper). – TLP
** ** Datos :: Dumper le ayudará a almacenar Array/hashes tal como es. Puede volver a utilizarlos a través de ** require/eval ** – tuxuday