Если «модерн» означает «я только недавно слышал об этом», я чувствую себя совершенно современно с bind_col и bind_columns DBI.Извлечение из сообщения героя DBI Тима Бунса ...
Для вашего случая:
my $sth = $dbh->prepare("SELECT COUNT(name) AS RESCOUNT FROM users");
my $count = 0;
$sth->bind_col(1,\$count); # bind to a reference to the variable
$sth->execute() or die "$DBI::errstr";
$sth->fetch;
print $count;
В цикле для оператора SELECT, возвращающего несколько записей:
my $sth = $dbh->prepare(qq{SELECT name FROM users WHERE zip_code == '20500'});
my $name = '';
$sth->bind_col(1,\$name); # bind to a reference to the variable
$sth->execute() or die "$DBI::errstr";
while ($sth->fetch) {
print $name, "\n";
}
И с bind_columns это работает:
my $sth = $dbh->prepare(qq{SELECT name,phone,address FROM users WHERE zip_code == '20500'});
my @fields = qw/name phone address/;
# With a 'SELECT All * ...', get all columns with @{$sth->{NAME_lc}}
my %data;
$sth->bind_columns( \( @data{@fields} ) ); # \(...) gives references to its elements
$sth->execute() or die "$DBI::errstr";
while ($sth->fetch) {
print "$data{name} lives at $data{address}, with phone $data{phone}.", "\n";
}
После того, как установка обработана, цикл легко написать и быстро запустить.(Но, тест).
HTH, извинитесь, если это слишком сильно отличается от постановки задачи ОП.Но это самый простой и прямой способ получить ваши возвращенные данные в виде переменных, которые вы хотите, так что вы можете перейти к каким-то действиям с ними ...