The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use warnings;
use strict;
use DBI;

# --config <path to the file>, --project <project name>, [--clean]
my @args = splice @ARGV;

local $ENV{DBI_USER} = "postgres";

unless ( grep $_ eq '--clean', @args ) {
    # can collect state before smoking and print it to stdout
    print join "\n", list_dbs(), '';
} else {
    # read collected info from stdin
    my %skip = map { chomp; $_ => 1 } <>;

    my @dbs = grep !$skip{ $_ }, list_dbs();
    return unless @dbs;

    my $dbh = DBI->connect("dbi:Pg:dbname=template1","postgres","",{RaiseError => 1});
    $dbh->do("DROP DATABASE $_") for @dbs;
}

sub list_dbs {
    local $@;
    return map {s/.*dbname=(.*)/$1/ ? $_ : () } grep defined,
        eval { DBI->data_sources("Pg") };
}