Можем ли мы использовать метод store Storable для связанного хэша?

Пытался сохранить ссылку на хеш в сохраняемом файле, и он работал нормально. Однако у меня также было требование хранить ключи в отсортированном порядке - поэтому я использовал следующее

tie %$hashref, 'Tie::IxHash'; store $hashref, $filename;

Но это не работает - файл создается, но его размер составляет всего 50 байт, и когда я использую функцию retrieve(), я получаю пустой хеш.

Я пытался использовать Tie::IxHash::Easy (потому что мой хэш - это хэш хэшей), но безрезультатно. Любая помощь?

1 ответ

Решение

Вы должны связать хеш-код, прежде чем заполнять его

use strict; use warnings;
use Storable;
use Tie::IxHash;
use Data::Dumper;

my $filename= 'xxx';

my $hashref;
tie %{$hashref}, 'Tie::IxHash';
$hashref->{b}={c=>2, d=>{e=>3}};
$hashref->{a}=1;

print Dumper(before=>$hashref);

store $hashref, $filename;

print Dumper(after=>retrieve('xxx'));

возвращается

$VAR1 = 'before';
$VAR2 = {
          'b' => {
                   'c' => 2,
                   'd' => {
                            'e' => 3
                          }
                 },
          'a' => 1
        };
$VAR1 = 'after';
$VAR2 = {
          'b' => {
                   'c' => 2,
                   'd' => {
                            'e' => 3
                          }
                 },
          'a' => 1
        };
Другие вопросы по тегам