Подтвердить что ты не робот

Какой лучший способ сделать глубокую копию структуры данных в Perl?

Учитывая структуру данных (например, хэш хэшей), какой чистый/рекомендуемый способ сделать глубокую копию для немедленного использования? Предположите разумные случаи, когда данные не особенно велики, не существует сложных циклов и удобочитаемости/ремонтопригодности/и т.д. важнее скорости любой ценой.

Я знаю, что могу использовать Storable, Clone, Clone:: More, Clone:: Fast, Данные:: Дампер и т.д. Какова нынешняя лучшая практика?

4b9b3361

Ответ 1

Clone намного быстрее, чем Storable::dclone, но последний поддерживает больше типов данных.

Clone::Fast и Clone::More в значительной степени эквивалентны, если память служит мне правильной, но меньше полной функции, чем даже Clone, и Scalar::Util::Clone поддерживает еще меньше, но IIRC является наиболее быстрым из всех для некоторых структур.

Что касается читаемости, все они должны работать одинаково, они практически взаимозаменяемы.

Если у вас нет конкретных требований к производительности, я бы просто использовал Storable dclone.

Я бы не использовал Data::Dumper для этого просто потому, что он такой громоздкий и окольный. Вероятно, это тоже будет очень медленным.

Для чего стоит, если вы когда-либо захотите настраивать клонирование, тогда Data::Visitor предоставляет возможности подключения и довольно полнофункциональное полное клонирование - это поведение по умолчанию.

Ответ 2

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

Ответ 3

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

Ответ 4

Попробуйте использовать fclone из Panda :: Lib, который кажется самым быстрым (написано на XS)