2016-04-29 5 views
2

Что делать, если мне нужно передать два значения для одной переменной? Работает ли следующий синтаксис?Perl: передача двух аргументов через конфигурационный файл

sub get_db { return "database_name", "new_database"}; 

Он не пропускает значения как

+0

Думаю, вам понадобится массив. –

ответ

3

Самый простой способ вернуть несколько значений из саб списка: (Примечание - ни один из следующего кода не было протестировано)

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 документации этого модуля, в которой более подробно рассматривается вопрос о возврате нескольких вещей из подполя.

0

Perl позволяет возвращать массив с несколькими значениями, например.

sub get_db { return ["database_name", "new_database"] }; 
+0

Спасибо ... это сработало – user3889479

Смежные вопросы