Вопрос по arrays, perl, hash, save, file – Хранить и читать хеш и массив в файлах на Perl

8

Я новичок. Мне нужны базовые знания о том, как данные должны быть сохранены и прочитаны в Perl. Скажем, чтобы сохранить хэш и массив. Какой формат (расширение) файла следует использовать? текст? Пока что я могу сохранить только все как строкуprint FILE %hash и читать их обратно как строкуprint <FILE>, Что я должен делать, если мне нужен хэш функции и входные данные массива из файла. Как вернуть их в хэш и массив?

Вы можете проверить такие модули какStorable или жеData::Dumper. TLP
Data::Dumper должен помочь вам хранить массив / хэши как есть. Вы можете повторно использовать их черезrequire/eval tuxuday

Ваш Ответ

4   ответа
1

как вы хотите сохранить свои данные в своем файле. Я попытаюсь написать некоторый базовый код на Perl, чтобы вы могли прочитать файл в массив и или записать обратно хеш в файл.

#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;
}
Сожалею. Я хотел опубликовать это как комментарий.
Интересно и полезно. Этот подход имеет значение в некоторых средах, где модули не просты в установке. Я согласен, что предпочтительный подход будет использовать Data :: Dumper (который прошел долгий путь в последние годы) или другой модуль.
Да уж. использование существующего модуля CPAN было бы более уместным, чем необработанный код.
0

я просто предлагаю сделать строку из массива / хеша с помощью join (), и они напишут это с помощью "print & quot; а затем прочитайте и используйте split (), чтобы снова создать массив / хэш. Это было бы более простым способом, как пример из учебника Perl.

Может быть трудно иметь дело с чем-то более сложным, чем массивы или хэши (например, многомерные массивы).
и какие будут недостатки? Ivan Wang
20

serialisation, Популярные варианты, которые являются надежнымиSereal, JSON:: XS а такжеYAML :: XS, Менее известные форматы:ASN.1, Avro, БЕРТ, BSON, CBOR, JSYNC, MessagePack, Буферы протокола, бережливость.

Другие часто упоминаемые вариантыхранимый а такжеData :: Dumper (или похожие)/eval, но я не могу рекомендовать их, потому что формат Storable зависит от версии Perl, иeval небезопасно, потому что выполняет произвольный код. По состоянию на 2012 год контрагент синтаксического анализаДанные :: Undump еще не продвинулись очень далеко. Я также не могу рекомендовать использовать XML, потому что он плохо отображает типы данных Perl, и существует множество конкурирующих / несовместимых схем для перевода между XML и данными.

Примеры кода (проверено):

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

Следующий шаг здесьobject persistence.

Также прочитайте:Сериализаторы для Perl: когда и что использовать

Похожие вопросы