Каков наилучший способ сделать глубокую копию структуры данных в 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 предоставляет возможности подключения и довольно полно функция глубокого клонирования является поведением по умолчанию.


У меня такое впечатление, что Storable::dclone() несколько канонических.


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