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
Perlmonks has two good discussions on serialization.
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;}