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