Каков наилучший способ сделать глубокую копию структуры данных в Perl?
учитывая структуру данных (например, хэш хэшей), чем лечить/рекомендуемый способ сделать глубокую копию для немедленного использования? Предположим, разумные случаи, когда данные не особенно велики, нет сложных циклов, а также читаемость/ремонтопригодность/и т. д. важнее скорости любой ценой.
Я знаю, что могу использовать Storable, клон, Clone:: More,Clone:: Fast, Data:: Dumper, etc. Какой лучше практика?
3 ответов
Clone
гораздо быстрее, чем Storable::dclone
, но последний поддерживает больше типов данных.
Clone::Fast
и Clone::More
в значительной степени эквивалентны, если память служит мне правильно, но менее полная функция, чем даже Клон, и Scalar::Util::Clone
поддерживает еще меньше, но IIRC является самым быстрым из них для некоторых структур.
что касается читаемости, все они должны работать одинаково, они практически взаимозаменяемы.
если у вас нет конкретных показателей должен я просто используйте Dclone Storable.
Я бы не стал использовать Data::Dumper
для этого просто потому, что это так громоздко и окольным путем. Вероятно, он тоже будет очень медленным.
для чего это стоит, если вы когда-нибудь хотите настраиваемое клонирование, то Data::Visitor
предоставляет возможности подключения и довольно полно функция глубокого клонирования является поведением по умолчанию.
клон вероятно, это то, что вы хотите для этого. По крайней мере, это то, что использует весь код, который я видел.