Для чего используется модуль Storeable?

Мне трудно понять, что делает Storable.

Я знаю, что он «сохраняет» переменную на вашем диске, но зачем мне это делать? Для чего бы я использовал этот модуль и как бы я это сделал?


person Dynamic    schedule 24.08.2011    source источник
comment
это не только для хранения на диске - сохраненные данные могут храниться где угодно (memcache, база данных, отправленные по сети, что угодно...)   -  person plusplus    schedule 25.08.2011
comment
для полноты картины я хотел бы, чтобы вы также заглянули в DBM::Deep.   -  person Joel Berger    schedule 25.08.2011
comment
Как часть использует модуль :)   -  person brian d foy    schedule 25.08.2011


Ответы (2)


Причины, которые приходят на ум:

  • Сохранение памяти при вызовах скриптов
  • Совместное использование переменных в разных процессах (иногда невозможно передать вещи)

Конечно, это не все, что делает Storable. Это также:

  • Позволяет создавать глубокие клоны структур данных
  • Сериализирует сохраненную структуру данных, что подразумевает меньший размер файла, чем вывод из Data::Dump.
  • Оптимизирован для скорости (поэтому быстрее retrieve, чем require файл, содержащий Data::Dump вывод
person Zaid    schedule 25.08.2011
comment
Это также потенциально безопаснее, чем requireинг файла [Data::Dump](), потому что кто-то мог добавить некоторый код Perl к выходным данным Data::Dumper. По умолчанию Storable не eval принимает любой полученный код, поэтому это безопаснее. - person Brad Gilbert; 18.12.2011

Один пример:

Ваша программа тратит много времени на заполнение вашей структуры данных, графа или дерева, и если программа выйдет из строя, вы потеряете все это и вам придется начинать заново с нуля. Чтобы не потерять эти данные и иметь возможность продолжить с того места, где они остановились в прошлый раз, вы можете сохранить моментальный снимок данных в файл вручную или просто использовать Storeable.

person holygeek    schedule 24.08.2011
comment
Могу ли я сохранить STDIN? Например, если я написал программу, которая берет имя (в $name) и печатает Hello, $name, могу ли я использовать ее для сохранения всех когда-либо использовавшихся имен и создать команду для вывода имен? - person Dynamic; 25.08.2011
comment
@perl.j, его можно использовать для хранения массива, так что да, вы можете сохранить список имен. - person ikegami; 25.08.2011
comment
@ikegami: Как сохранить ввод от оператора Perl Diamond? - person Dynamic; 25.08.2011
comment
perl.j: сохраняет переменные, а не операторы. Как вы будете записывать что-либо когда-либо прочитанное с помощью <> в переменную, это совершенно другой вопрос, и он вообще не связан с хранимым. - person ysth; 25.08.2011
comment
@perl.j, то же, что и любая другая строка. - person ikegami; 25.08.2011
comment
@perl.j, my $input = <>; store_fd(\$input, $fh); - person ikegami; 25.08.2011
comment
@ikegami: Будет ли храниться каждый $input при каждом использовании программы? - person Dynamic; 26.08.2011
comment
@perl.j, что ты имеешь в виду под каждым вводом $? Есть только один $input. - person ikegami; 26.08.2011
comment
@ikegami: я имею в виду, что если я буду часто использовать эту программу, у меня будет несколько разных $input, верно? Итак, как мне сохранить каждую из этих $input? - person Dynamic; 26.08.2011