Прежде всего, вы абсолютно не должны интерполировать переменные непосредственно в ваши строки SQL. Это оставляет открытой возможность инъекций SQL-инъекций. Даже если эти переменные не поступают с пользовательского ввода, это оставляет открытой возможность опасных ошибок, которые могут испортить ваши данные.
DBD-драйвер MySQL поддерживает несколько операторов, хотя по умолчанию он отключен как функция безопасности. См. mysql_multi_statements
в разделе Class Methods в документации DBD :: mysql.
Но гораздо лучшее решение, которое одновременно решает обе проблемы и является более переносимым, заключается в использовании подготовленных операторов и значений заполнителей.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Затем, получить данные в петле своего рода:
while($whatever) {
my ($EC, $MR, $EM) = get_the_data();
$sth->execute($EC, $MR, $EM);
}
Вам нужно только подготовить заявление один раз, а значения заполнителей заменяются (и гарантированно будет цитироваться) по драйвер DBD.
Подробнее о заполнителях в DBI docs.
в вашем примере, нет никаких причин, чтобы не объединить эти два обновления в один; можете ли вы привести пример, похожий на обновления, которые вам действительно нужны? – ysth