I am breaking out in a sweat just looking at all that work you did for such a simple single-table commit to database. Have a look at a
SQL::Catalog +
DBIx version of the same code
package DBH;
use strict;
use DBIx;
use constant DBI_DSN => 'DBI:vendor:database:host';
use constant DBI_USER => 'user';
use constant DBI_PASS => 'pass';
my $DBH;
sub import {
unless (ref $DBH) {
$DBH = DBI->connect(
DBI_DSN, DBI_USER, DBI_PASS,
{RaiseError => 1}
);
}
$DBIx::DBH = $DBH;
}
1;
package main;
use DBH; # creates database handle via import()
### initialize + config code un-necessary
### not with SQL::Catalog + DBIx
### and not, as mentioned in the conclusion
### with DBIx::Recordset
### and probably not Alzabo either
find sub {
return unless m/\.mp3$/;
my $tag = get_mp3tag($_) or return;
my %tag = %$tag;
# sql_do finds the $dbh for you...
sql_do sql_lookup 'insert_mp3_tag_data',
@tag{title artist album year genre} ;
}, @ARGV;
Also,
consider that your entire example would be a DBIx::Recordset one-liner. I think I will contact Dave Rolsky and coax him into posting an
Alzabo version.
Then every person who is actively working on database frameworks will have an example here.