Constantly I'll find myself working with DBIx::Class and I want to see the underlying table structure. So I exit my editor, fire up mysql, sob quietly, and type "show create table $some_table". Now I don't have to -- except for the sobbing part.
Make sure you have filetype plugin on in your .vimrc and in your .vim/ftplugin/perl.vim file add the following code (replacing the variables in the beginning of the function, of course):
noremap T :call ShowCreateTable(expand(""))
function! ShowCreateTable(class_segment)
" replace these values with whatever your system needs
let dbic_base = "My::Schema::"
let host = "localhost"
let port = 3306
let user = "someuser"
let pass = "somepass"
let db = "somedatabase"
let class = dbic_base . a:class_segment
let table = system("perl -M". class ." -e 'print ". class ."->table'")
let create = system(
\ "mysql -h".host.
\ " -P" .port.
\ " -u" .user.
\ " -p" .pass.
\ " " .db.
\ " -e 'show create table ".table."'"
\ )
echo substitute(create, "\\\\n", "\n", "g")
endfunction
Then, when I see stuff like this:
$schema->resultset('MasterBrand')->find_or_create({ ...
I just position my cursor on the MasterBrand word, type 'T' and it automatically shows the "create table" statement.
Of course, if you don't want to create a .vim/ftplugin/perl.vim file (you should, but you don't have to :), then you could drop the function in your .vimrc and add the following:
filetype plugin on
au! FileType perl :noremap T :call ShowCreateTable(expand(""))