Нет не делайте несуществующих объектов. Можно проверить http://codebetter.com/blogs/karlseguin/archive/2008/04/27/foundations-of-programming-pt-7-back-to-basics-memory.aspx для получения дополнительной информации, но вещи установки в NULL ничего не сделают, кроме грязного код.
YAML против JSON - это то, что очень не решено в Perl, и я признаю, что склоняюсь к середине этого. Я бы посоветовал вам получить столько же поддержки сообщества. Я бы принял решение на основе различных плюсов и минусов форматов. Я разбиваю различные варианты сериализации данных следующим образом (я собираюсь посетить вики сообщества, чтобы люди могли добавить к нему):
YAML Pros
XML Pros
XML Минусы
Perl / Data :: Dumper Плюсы
Perl / Data :: Dumper Недостатки
Плюсы с возможностью хранения
Сохраняемые недостатки
Если вы рассматриваете объектную нотацию JavaScript, почему бы не использовать «объектную нотацию Perl»?
JSON:
{"name": "bob", "parents": {"mother": "susan", "father": "bill"}, "nums": [1, 2, 3]}
Perl:
{name => "bob", parents => {mother => "susan", father => "bill"}, nums => [1, 2, 3]}
Вы также можете рассмотреть возможность использования Storable . Скорее всего, вы получите очень хороший прирост скорости. Компромиссы следующие:
Как и в большинстве случаев, это зависит . Я думаю, если вам нужна скорость и совместимость (с другими языками), используйте JSON, в частности JSON :: XS .
Если вам нужно что-то, что будет использоваться только модулями Perl, придерживайтесь YAML. Гораздо чаще можно найти модули Perl на CPAN, которые поддерживают описание данных с помощью YAML или которые зависят от YAML, чем JSON.
Обратите внимание, что я не являюсь авторитетом, и это мнение основано в основном на догадках и предположениях. В частности, я не профилировал JSON :: XS и YAML :: XS . Если я оскорбительно невежественен, я могу только надеяться, что заставлю кого-то достаточно разгневанного, чтобы внести полезную информацию в обсуждение, исправив меня.
Реализация YAML на чистом Perl (модуль YAML
вместо YAML :: Syck
), похоже, имеет серьезные проблемы.
default (приведенный ниже фрагмент был скопирован из буфера * sepia-repl *
в
Emacs):
I need user feedback! Please send questions or comments to seano@cpan.org.
Sepia version 0.98.
Type ",h" for help, or ",q" to quit.
main @> use YAML
undef
main @> $foo = bless {}, 'asdf'
bless( {}, 'asdf' )
main @> $foo_dump = YAML::Dump $foo
'--- !!perl/hash:asdf {}
'
main @> YAML::Load $foo_dump
bless( {}, 'asdf' )
Это довольно опасно с точки зрения безопасности, потому что могут использоваться ненадежные данные.
для вызова любого метода DESTROY
, который был определен в вашем приложении
- или любой из модулей, которые он использует.
Следующая короткая программа демонстрирует проблему:
#!/usr/bin/perl
use YAML;
use Data::Dumper;
package My::Namespace;
sub DESTROY {
print Data::Dumper::Dumper \@_;
}
package main;
my $var = YAML::Load '--- !!perl/hash:My::Namespace
bar: 2
foo: 1
';
JSON не допускает этого по умолчанию - можно сериализовать Perl "объекты", но для этого вам нужно определить TO_JSON методы.