Сначала несколько комментариев по коду:
Вы, похоже, не используете строгий . Вы должны.
Вы, кажется, думаете, что можно попирать все пространство имен DBI
. Это не так.
Вы должны использовать заполнители вместо интерполяции в строку SQL.
Теперь для актуальной задачи (непроверенный код):
my $averager = Math::Business::EMA->new;
$averager->set_days(3);
my $sth = $db->prepare(sprintf q{
SELECT close
FROM %s
WHERE day <= ?
ORDER BY day DESC
LIMIT ?
}, $table);
$sth->execute($DATE, $EMA); # what is $EMA?
while ( my $row = $sth->fetchrow_arrayref ) {
$averager->insert( $row->[0] );
my $avg = $averager->query;
$avg = 'n/a' unless defined $avg;
print "$avg\n";
}