Archivia e leggi l’hash e l’array nei file in Perl

Sono un noob.ho bisogno di alcune conoscenze di base su come i dati dovrebbero essere salvati e letti sotto perl. Di ‘per salvare un hash e un array. Quale formato (estensione) di file dovrebbe essere usato? testo? Finora posso solo salvare tutte le cose come stringa di print FILE %hash e rileggerle come stringa di print . Cosa devo fare se ho bisogno degli hash della mia funzione e degli input di array da un file. Come rimetterli in hash e array?

Stai cercando la serializzazione dei dati. Le scelte più diffuse sono Sereal , JSON :: XS e YAML :: XS . I formati meno noti sono: ASN.1 , Avro , BERT , BSON , CBOR , JSYNC , MessagePack , Protocol Buffers , Thrift .

Altre scelte spesso citate sono Storable e Data :: Dumper (o simili) / eval , ma non posso raccomandarli perché il formato di Storable è dipendente dalla versione Perl e eval non è sicuro perché esegue codice arbitrario. A partire dal 2012, la contro parte di dati Data :: Undump non è ancora progredita molto. Non posso nemmeno consigliare l’uso di XML perché non associa bene i tipi di dati Perl e esistono più schemi concorrenti / incompatibili su come tradurre tra XML e dati.


Esempi di codice (testati):

 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 }; } 

Il prossimo passo avanti è la persistenza dell’object .


Leggi anche: Serializzatori per Perl: quando usare cosa

Perlmonks ha due buone discussioni sulla serializzazione.

  • Come salvare e ricaricare il mio hash
  • Come posso visualizzare la mia complessa struttura dati?

Questo dipende molto da come vorresti memorizzare i tuoi dati nel tuo file. Proverò a scrivere del codice perl di base per permetterti di leggere un file in un array e di scrivere un hash in un file.

 #Load a file into a hash. #My Text file has the following format. #field1=value1 #field2=value2 # is an opens a sample txt file in read-only mode. my %hash; while () { chomp; my ($key, $val) = split /=/; $hash{$key} .= exists $hash{$key} ? ",$val" : $val; } 

Se sei nuovo, ti suggerisco di eseguire make to string da array / hash con join () e loro lo scrivono con “print” e quindi leggono e usano split () per rendere di nuovo array / hash. Sarebbe un modo più semplice come quello di Perl per l’insegnamento di libri di testo.