Qual è il modo migliore per fare una copia profonda di una struttura dati in Perl?

Data una struttura dati (ad esempio un hash di hash), qual è il modo pulito / consigliato per fare una copia profonda per l’uso immediato? Supponiamo casi ragionevoli, in cui i dati non sono particolarmente grandi, non esistono cicli complicati e leggibilità / manutenibilità / ecc. sono più importanti della velocità a tutti i costi.

So che posso usare Storable , Clone , Clone :: More, Clone :: Fast , Data :: Dumper , ecc. Qual è la migliore pratica corrente?

Clone è molto più veloce di Storable::dclone , ma quest’ultimo supporta più tipi di dati.

Clone::Fast and Clone::More sono praticamente equivalenti se la memoria mi serve bene, ma meno funzionalità complete persino di Clone, e Scalar::Util::Clone supporta ancora meno ma IIRC è il più veloce di tutti per alcune strutture.

Per quanto riguarda la leggibilità, tutti dovrebbero funzionare allo stesso modo, sono praticamente intercambiabili.

Se non hai esigenze di prestazioni specifiche, utilizzerei semplicemente dclone di Storable.

Non userei Data::Dumper per questo semplicemente perché è così ingombrante e circolare. Probabilmente sarà anche molto lento.

Per quello che vale, se si desidera la clonazione personalizzabile, Data::Visitor offre funzionalità di aghook e la funzionalità di clonazione completa completa è il comportamento predefinito.

La mia impressione è che Storable::dclone() sia alquanto canonico.

Il clone è probabilmente quello che vuoi per quello. Almeno, questo è quello che usa tutto il codice che ho visto.