in reply to Dumping a Database via DBI

This is the dumper code I've written; it assumes there's a .my.cnf file in /home/user with connect info. Data::Dumper manages the serialization.
#!/usr/local/bin/perl -w use strict; use DBI; use Data::Dumper; # Connect to database my $dbh; eval { $dbh = DBI->connect("dbi:mysql:;mysql_read_default_file=/home/user +/.my.cnf", "", "", { RaiseError => 1, PrintError => 0 } ); 1; } or die "Couldn't connect to database: $DBI::errstr"; # Get a list of the tables my @table_names; eval { @table_names = @{$dbh->selectcol_arrayref("SHOW TABLES")}; 1; } or die "Couldn't retrieve list of MySQL tables: $DBI::errstr"; # Get data from each table my (@tables, $table); eval { foreach $table (@table_names) { # Record how the table is layed out my $layout = $dbh->selectall_arrayref("DESCRIBE $table"); # Store the data in a 2D array reference my @fields = map ${$_}[0], @{$layout}; my $data = $dbh->selectall_arrayref("SELECT " . (join ',', @fields) . " FROM $table"); push @tables, [$layout, $data]; } 1; } or die "Failed while obtaining data from $table: $DBI::errstr"; # Print data to STDOUT my %database; @database{@table_names} = @tables; $Data::Dumper::Useqq = 1; $Data::Dumper::Indent = 0; print Data::Dumper->Dump([\%database], ['database']); eval { $dbh->disconnect; 1; } or die "Couldn't disconnect properly from database: $DBI::errstr";