Самый простой способ вернуть несколько значений из саб списка: (Примечание - ни один из следующего кода не было протестировано)
return ($db_name, $new_db, $table, $rows)
...
my ($database_name, $database, $table_name, $entry_count) = get_db();
, но это легко испортить - если у вас есть недостаток между количеством возвращаемых и полученных вещей, что-то тихо становится undef. Аналогично, если порядок возвращаемых значений неверен, вы собираетесь ввести тонкую ошибку.
Чуть лучше вернуть хэш;
....
my $return_values = { NAME => $db_name , DB => $new_db , TABLE => $table } ;
# add the number of rows and return it
$return_values->{ COUNT } = $rows ;
return $return_values ;
...
...
my $db_stuff = get_db();
for my $i (1 .. $db_stuff->{COUNT}) {
...
Лучше снова узнать немного ОО и вернуть объект. Moo является одним из многих вариантов - это будет выглядеть примерно так:
Package DBstuff;
has name, is => ro ;
has db, is => ro ;
has table, is => ro ;
has count, is => rw ;
1;
... in another file ...
my $db_stuff = DBstuff->new(
name => $name ,
db => $db ,
table => $table,
);
# Add rows and return
$db_stuff->count($rows);
return $db_stuff ;
...
...
my $db_data = get_db();
for my $i (1 .. $db_data->count) {
...
Существует также модуль, который называется Object :: Результат, который почти наверняка будет излишним, но используете ли вы его или нет, я хотел бы рекомендовать RATIONAL section документации этого модуля, в которой более подробно рассматривается вопрос о возврате нескольких вещей из подполя.
Думаю, вам понадобится массив. –