Store and read hash and array in files in Perl Store and read hash and array in files in Perl arrays arrays

Store and read hash and array in files in Perl


You're looking for data serialisation. Popular choices that are robust are Sereal, JSON::XS and YAML::XS. Lesser known formats are: ASN.1, Avro, BERT, BSON, CBOR, JSYNC, MessagePack, Protocol Buffers, Thrift.

Other often mentioned choices are Storable and Data::Dumper (or similar)/eval, but I cannot recommend them because Storable's format is Perl version dependent, and eval is unsafe because it executes arbitrary code. As of 2012, the parsing counter-part Data::Undump has not progressed very far yet. I also cannot recommend using XML because it does not map Perl data types well, and there exists multiple competing/incompatible schemas how to translate between XML and data.


Code examples (tested):

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

The next step up from here is object persistence.


Also read: Serializers for Perl: when to use what


This really depends upon how you'd like store your data in your file. I will try writing some basic perl code to enable you to read a file into an array and or write back a hash into a file.

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