передача хеша и массива в функцию - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь передать ConnectODBC(%settings , @connectionString); хэш abd затем массив

В функции, которую я загружаю, тогда как my (%settings , @connectionString) = @_;

для хэша я получаю правильные значения, но для print $connectionString[0] . ".\n";

Я получаю Use of uninitialized value $conection[0] in concatenation (.)

Есть идеи, почему?

1 Ответ

9 голосов
/ 14 марта 2011

Поскольку вы присваиваете список / хэш, первый аргумент поглощает все это.

my %h1 = ( key => value );
my @a1 = (1, 2 );
my ( @a2, %h2 ) = ( @a1, %h1 );
# @a2 now contains (1,2,key,value) and %h2 is undefined.

Чтобы получить то, что вы хотите, вы должны вместо этого передать ссылки.

ConnectODBC( \%settings , \@connectionString);
sub ConnectODBC {
    my ( $setting_ref, $connection_ref ) = @_;
    my %settings = %$setting_ref;
    my @connectionString = @$connection_ref;
}

Я должен отметить, что создание хэшей и массивов из ссылок в подпрограмме, вероятно, не является необходимым. Вы можете получить доступ к настройкам прямо из ссылки. $setting_ref->{key} совпадает с $settings{key}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...