The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Requires 'DBD::SQLite';
use Data::Dumper;

my $code = compile('lib/SQL/Maker/SQLType.pm');
my $dbh = DBI->connect('dbi:SQLite:', '', '', {RaiseError => 1});
$dbh->do(q{CREATE TABLE foo (id, bar)});
$dbh->do(q{INSERT INTO foo VALUES (1, "oyoyo")});
$dbh->do(q{INSERT INTO foo VALUES (3, "bar")});
my $got = do {
    local *STDOUT;
    open *STDOUT, '>', \my $out;
    $code->();
    $out;
};
is $got, "3\n";

done_testing;exit(0);

sub compile {
    my $module = shift;

    my ($code, $line) = extract_synopsis($module);
    $code   = qq(#line $line "$module"\n sub { $code });
    my $subref = eval $code;
    die Dumper($@, $code) if $@;
    $subref;
}

sub extract_synopsis {
    my $file = shift;

    my $content = do {
        local $/;
        open my $fh, "<", $file or die "$file: $!";
        <$fh>;
    };

    my $code = ( $content =~ m/^=head1\s+SYNOPSIS(.+?)^=head1/ms )[0];
    my $line = ( $` || '' ) =~ tr/\n/\n/;

    return $code, $line - 1,
      ( $content =~ m/^=for\s+test_synopsis\s+(.+?)^=/msg );
}