したい場合、 DBI で、 desc ~ や、 show create table ~ くらいしかないの?
#!/usr/local/bin/perl
use strict;
use utf8;
use DBI;
use Data::Dumper;
my $DB_CONF =
{host=>'localhost',
port=> 3306,
db_name=> 'ないしょ',
db_user=> 'ないしょ',
db_pass=> '',
db_opt=>
{AutoCommit=> 0,
PrintError=> 0,
RaiseError=> 1,
ShowErrorStatement=> 1,
AutoInactiveDestroy=> 1,
mysql_enable_utf8=> 1,
mysql_auto_reconnect=> 0},
client_encoding=> 'utf8'
};
main(@ARGV);
sub main {
my $dbh = connect_db($DB_CONF);
my $tbl_name = 'h_juchuu';
print_desc_tbl($dbh, $tbl_name);
print_show_create_tbl($dbh, $tbl_name);
$dbh->disconnect();
}
sub print_show_create_tbl {
my ($dbh, $tbl_name) = @_;
my $sql = "show create table $tbl_name";
my $sth = $dbh->prepare($sql);
unless( $sth->execute() ){
die $sth->errstr;
}
while( my $row = $sth->fetchrow_hashref){
print $row->{'Create Table'},"\n";
}
}
sub print_desc_tbl {
my ($dbh, $tbl_name) = @_;
my $sql = "desc $tbl_name";
my $sth = $dbh->prepare($sql);
unless( $sth->execute() ){
die $sth->errstr;
}
while( my $row = $sth->fetchrow_hashref){
print join("\t",$row->{Field},$row->{Key},$row->{Type},),"\n";
}
}
sub connect_db {
my ($db_conf) = @_;
my $dbh
= DBI->connect(
"DBI:mysql:database=$db_conf->{db_name};host=$db_conf->{host}",
$db_conf->{db_user}, $db_conf->{db_pass}, $db_conf->{db_opt} );
$dbh->do("SET NAMES $db_conf->{client_encoding}")
or die "cannot set encoding";
return $dbh;
}
1;
__END__