È possibile utilizzare uno qualsiasi dei serializzatori noti, ad es. JSON::XS o Storable. Storable
è meglio se si desidera recuperare i riferimenti come riferimenti, non come copie di valori. Quindi salva un oggetto serializzato nel campo di qualsiasi tipo (VARCHAR, BLOB, ...) che soddisfi i requisiti di archiviazione.
use Storable qw(nfreeze thaw);
use DBI;
# ... connect to database
# Store
my $data = [ [$a, $b, $c ], [ $a, $b, $c ] ];
my $bytestream = nfreeze $data;
$dbh->do('insert into table (field) values(?)', undef, $bytestream);
# Retrieve
$bytestream = $dbh->selectrow_array('select field from table where ...');
$data = thaw $bytestream;
Inoltre, è possibile comprimere $bytestream
, per esempio, tramite IO::Compress::Gzip
my $bytestream = gzip nfreeze $data;
L'ho provato ma ottengo il seguente errore: Impossibile chiamare il metodo "nfreeze" sul riferimento non trattato – smith
Il metodo di importazione è 'nfreeze'? Usa 'qw (nfreeze) memorizzabile 'o scrivi un nome completo del metodo:' Storable :: nfreeze ($ data) '. – Ali
hai ragione grazie, anche qual è il modulo che decomprime gzip? – smith