Primeiro e mais importante, você absolutamente não deve interpolar variáveis diretamente em suas strings SQL. Isso deixa em aberto a possibilidade de ataques de injeção de SQL. Mesmo que essas variáveis não venham da entrada do usuário, isso deixa em aberto a possibilidade de bugs perigosos que podem estragar seus dados.
O driver MySQL DBD suporta várias instruções, embora esteja desativado por padrão como um recurso de segurança. Veja
mysql_multi_statements
sob os Métodos de classe
seção na documentação DBD::mysql. Mas uma solução muito melhor, que resolve os dois problemas ao mesmo tempo e é mais portátil, é usar instruções preparadas e valores de espaço reservado.
my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
Em seguida, coloque seus dados em um loop de algum tipo:
while( $whatever) {
my ( $EC, $MR, $EM ) = get_the_data();
$sth->execute( $EC, $MR, $EM );
}
Você só precisa preparar a instrução uma vez e os valores de espaço reservado são substituídos (e garantidos para serem citados corretamente) pelo driver DBD.
Leia mais sobre marcadores de posição nos documentos DBI .