On Jun 24, 2010, at 16:18, Denis Davydov wrote:

> Здравствуйте!
> 
> Как лучше поступить? Надо хранить массив подобных структур в файле (и 
> доставать, если надо):
> 
> $VAR1 = bless( {
>                 'bandwidth' => bless( {
>                                       'out' => 34,
>                                       'in' => 10
>                                     }, 'Customer::Network::Bandwidth' ),
>                 'customer' => bless( {
>                                      'status' => 0,
>                                      'name' => "\x{422}\x{435}\x{441}\x{442}",
>                                      'cid' => 5
>                                    }, 'Customer' ),
>                 'prefix' => '192.168.0.1/30'
>               }, 'Customer::Network' );
> 
> Как лучше поступить? Что использовать? Вариант с DBI отпадает (нужно именно в 
> файл). Как я понял, JSON::XS не подойдет.
> 

У нас на проекте есть модуль Yandex::Persistent, я бы его давно залил на cpan, 
но надеялся, что это велосипед, и найду открытый аналог, который всем устроит.
(урезанную его версию можно посмотреть тут: 
http://search.cpan.org/dist/Ubic/lib/Ubic/Persistent.pm)

Внутренняя версия еще поддерживает опцию format => qr/ json | dump | storable 
/x и более тонкий контроль над локами.
Думаю, скоро все-таки решусь и выложу его под именем Data::Persistent.

Еще на cpan'е есть http://search.cpan.org/dist/Persistent-Base/ (но он 
обновлялся десять лет, и в нем строгая типизация, фуу).
И у Сережкина был http://search.cpan.org/dist/Storable-Ref/, но он только 
storable умеет.
Или вот http://search.cpan.org/dist/Tie-Persistent/, тоже симпатично выглядит, 
и умеет почти все, кроме локов.

PS: а вообще хранить storable и даже dump'ы - зло, потому что не факт, что оно 
правильно десериализуется после обновления модуля. Мало ли, приватная 
переменная переименуется.

-- 
Вячеслав Матюхин
http://friendfeed.com/mmcleric
http://berekuk.ru

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить