Использование заполнителей .
Обновление: Я только что понял, что у вас есть параллельные массивы. Это действительно не очень хороший способ работы с элементами данных, которые идут вместе. С этим предупреждением вы можете использовать List :: MoreUtils :: each_array :
#!/usr/bin/perl
use strict; use warnings;
use DBI;
use List::MoreUtils qw( each_array );
my $dbh = DBI->connect(
"dbi:Sybase:server=$Srv;database=$Db",
$user, $passwd,
) or die sprintf 'Could not connect to database: %s', DBI->errstr;
my $sth = $dbh->prepare(
'INSERT INTO table1 (id, name, address) VALUES (?, ?, ?)'
) or die sprintf 'Could not prepare statement: %s', $dbh->errstr;
my @ids = qw( a b c);
my @names = qw( d e f );
my @addresses = qw( g h i);
my $it = each_array(@ids, @names, @address);
while ( my @data = $it->() ) {
$sth->execute( @data )
or die sprintf 'Could not execute statement: %s', $sth->errstr;
}
$dbh->commit
or die sprintf 'Could not commit updates: %s', $dbh->errstr;
$dbh->disconnect;
Обратите внимание, что код не проверен.
Вы также можете прочитать FAQ: Что плохого в том, чтобы всегда заключать в кавычки "$ vars"? .
Кроме того, учитывая, что единственный способ справиться с ошибкой - это умереть, возможно, вы захотите указать { RaiseError => 1 }
в вызове connect
.