New answer to an old post, but here's an example of loading to a table using (brand new module as of this post)
DBIx::BulkUtil. This library can do the traditional "load from a file", or you can create a function to generate and return the rows of data (or pass in your own file handle for sqlldr to read) to be fed to sqlldr through stdin:
my ($dbh, $dbu) = DBIx::BulkUtil->ora_connect(
Database => $database,
User => $user,
Password => $pw,
);
# Assuming two column table
# Default is "|" column delimited, "\n" row delimited
my @rows = qw(
abc|def
ghi|jkl
);
sub insert_row {
my $data = shift @rows or return;
return $data . "\n";
}
$dbu->bcp_in($table, '-', {
Stdin => \&insert_row,
});
$dbh->disconnect();