Сброс хэша массивов в файл

#perl

#perl

Вопрос:

Как можно сбросить хэш массивов в файл?

Каждый хэш-ключ — это имя папки, а массив — это все файлы, перечисленные в папке.

Вот над чем я работаю,

 open OUTFILE, "> output.txt" or die $!;

    foreach my $key (keys %folder_structure) {

    print OUTFILE "$keyn";

    foreach my $line (@{$folder_structure{$key}}) {

        print OUTFILE "$linen";

        }

    }

    close OUTFILE;
  

Ответ №1:

Если у вас нет каких-либо конкретных требований к формату вывода, самый простой способ — использовать Data::Dumper:

 use strict;
use Data::Dumper;

open OUTFILE, "> output.txt" or die $1;
print OUTFILE Dumper %folder_structure;
close OUTFILE;
  

Редактировать: Согласно комментариям, Dumper передается ссылка на хэш, а не на сам хэш.

Модуль Data::Dumper имеет некоторые настройки для управления выводом, о которых вы можете прочитать на его странице CPAN.

Комментарии:

1. Вы должны указать hashref в качестве аргумента для Dumper. Dumper %folder_structure

2. Вы, безусловно, получите более понятный вывод из Data::Dumper, если будете использовать ссылку на хэш. Но я думаю, вы несколько преувеличиваете, говоря, что вы «должны» его использовать.

3. @davorg: Ты прав, я должен был сказать : You should give ... . Английский не является моим родным языком.

Ответ №2:

Storable.pm модуль, включенный в дистрибутив Perl core начиная с версии 5.8, а также доступный из CPAN, предназначен для того, чтобы позволить вам «замораживать» и «размораживать» сложные структуры данных, сохраняя их в файл и извлекая их позже.

 use Storable;

my %structure = (foo => 1, bar => 3);
store(%structure, 'output.storable');
  

Чтобы восстановить его обратно в память:

 my %structure = %{retrieve('output.storable')};
  

Или, возможно, более разборчиво:

 my $structure_hashref = retrieve('output.storable');
my %original_structure = %{$structure_hashref};