Как делают я читал назад в выводе Данных:: Самосвал?

Corda не позволяет десериализовать весь класс по умолчанию, потому что вокруг него есть известные эксплойты и уязвимости. Следовательно, Corda позволяет десериализовать только классы из белого списка. Классы могут быть просто внесены в белый список, используя аннотацию @CordaSerializable поверх вашего класса.

По умолчанию, Корда внесла в белый список некоторые классы для вас , отметьте здесь . Если класс, который вы хотите добавить в белый список, отсутствует здесь, вам придется занести его в белый список.

5
задан Peter Mortensen 24 April 2016 в 10:26
поделиться

9 ответов

Вот поток, который обеспечивает пару различных вариантов: несамосвал

Если Вы просто ищете персистентность данных, модуль Storable мог бы быть Вашим лучшим выбором.

11
ответ дан 18 December 2019 в 05:21
поделиться

Как другие уже сказали, Вы, вероятно, были бы более обеспеченным хранением данных в лучшем формате сериализации:

  • Storable - это является быстрым и легким, но довольно определенным для Perl (но удовлетворит Вашу потребность в быстром решении в относительно неважном сценарии легко),
  • YAML, с помощью модуля YAML или YAML:: Крошечный, или YAML:: Любой как обертка для использования в своих интересах безотносительно модуля (модулей) JSON доступен в системе
  • JSON, с помощью модуля JSON или JSON:: XS для большей скорости (или JSON:: Любой как обертка для использования в своих интересах безотносительно модуля (модулей) JSON доступен в системе),
  • XML, с помощью XML-простого модуля или одного из других модулей XML.

Лично, я думаю, что стремился бы к YAML или JSON... Вы не можете стать намного легче, чем:

my $data = YAML::Any::LoadFile($filename);

10
ответ дан 18 December 2019 в 05:21
поделиться

По умолчанию, Данные:: вывод Самосвала не может быть проанализирован оценкой, особенно если выводимая структура данных является круговой в некотором роде. Однако можно установить

$Data::Dumper::Purity = 1;

или

$obj->Purity(1);

где obj Данные:: объект Самосвала. Любой из них вызовет Данные:: Самосвал для создания вывода, который может быть проанализирован оценкой.

Посмотрите Данные:: Самосвал documenatation в CPAN для всех подробностей.

8
ответ дан 18 December 2019 в 05:21
поделиться

Как Rich говорит, Вы, вероятно, не хотите использовать Данные:: Самосвал для персистентности, а скорее чего-то как Storable.

Однако отвечать на вопрос, который задают... IIRC, Данные:: Самосвал не объявляет, что Ваши переменные my, таким образом, Вы делаете это сами так или иначе?

Смочь к eval данные въезжают задним ходом, переменная не должна быть my в оценке. Если Ваш текстовый файл содержал это:

$x = [ { foo => 'bar', asdf => undef }, 0, -4, [ [] ] ];

Затем это работало бы:

my $vars;
{
  undef $/;
  $vars = <FILE>;
}

my $x;    
eval $vars;
print $x;
6
ответ дан 18 December 2019 в 05:21
поделиться

Если Вы хотите остаться с чем-то легким и человекочитаемым, просто используйте Data::Dump модуль вместо Data::Dumper. В основном это Data::Dumper сделанный правильно - это производит допустимые выражения Perl, готовые к присвоению, не создавая все странные $VAR1, $VAR2 и т.д. переменные.

Затем если Ваш код похож:

my $x = [ { foo => 'bar', asdf => undef }, 0, -4, [ [] ] ];

Сохраните его использование:

use Data::Dump "pp";
open F, ">dump.txt";
print F pp($x);

Это производит файл dump.txt это похоже (на моем ПК, по крайней мере):

[{ asdf => undef, foo => "bar" }, 0, -4, [[]]]

Загрузка это использование:

open F, "dump.txt";
my $vars;
{ local $/ = undef; $vars = <F>; }
my $x = eval $vars;

Отметьте это

  1. Если Вы потрудились помещать присвоение на $/ в его собственном блоке необходимо использовать local для обеспечения это - значение, на самом деле восстанавливается в конце блока; и
  2. Результат eval() потребности, которым присвоят $x.
3
ответ дан 18 December 2019 в 05:21
поделиться

Вы уверенный, что файл был создан Данными:: Самосвал? Не должно быть a my там.

Некоторыми другими опциями является Storable, YAML или DBM:: Глубоко. Я прохожу некоторые примеры в главе "Персистентности" Освоения Perl.

Удача, :)

1
ответ дан 18 December 2019 в 05:21
поделиться

Я думаю, что Вы хотите поместить

our $x;

в Ваш код прежде, чем получить доступ к x. Это удовлетворит строгую проверку ошибок.

Однако я присоединяюсь к другой речи в предложении Storable.

0
ответ дан 18 December 2019 в 05:21
поделиться

Это хорошо работает для меня:

Выписывание:

open(my $C, qw{>}, $userdatafile) or croak "$userdatafile: $!";
use Data::Dumper;
print $C Data::Dumper->Dump([\%document], [qw(*document)]);
close($C) || croak "$userdatafile: $!";

Чтение в:

open(my $C, qw{<}, $userdatafile) or croak "$userdatafile: $!";
local $/ = $/;
my $str = <$C>;
close($C) || croak "$userdatafile: $!";
eval { $str };
croak $@ if $@;
0
ответ дан 18 December 2019 в 05:21
поделиться

Этот фрагмент короткий и работал у меня (я читал в массиве). Он берет имя файла из первого аргумента скрипта.


# Load in the Dumper'ed library data structure and eval it
my $dsname = $ARGV[0];
my @lib = do "$dsname";
1
ответ дан 18 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: