LINUX.ORG.RU

[perl] вызов функции &func( var1 => 'val1', var2 => val2 )

 


0

0

Неоднократно встречал в перловых библиотеках (например, CGI) вот такой вот вызов:

&func( var1 => 'val1', var2 => 'val2' );

но так и не понял, как описать функцию, чтобы использовать эти параметры.

Вот например такой вызов: &func( 'val1', 'val2' ) -- понятен.

sub func() {
  my( $var1, $var2 ) = @_;
# ..........
# ну то есть работа идет как с массивом,
# и в переменной $var1 сидит val1,
# в переменной $var2 сидит val2
}

В первом случае, интуитивно понятно, что в вызове используется хеш,
пытаюсь сделать по аналогии, не получается.

sub func() {
  my %hash = %_;
# не работает
}

Что делать?
anonymous

Все просто: есть только @_ (никаких %_ нету), который содержит в себе все переданные аргументы.

Поэтому надо так: sub func { my %hash = @_; # работает }

anonymous
()
Ответ на: комментарий от anonymous

Все правильно, стрелка => - всего лишь синтаксический сахар, эквивалент запятой с "закавычиваним" левого операнда. Поэтому вызов func( var1 => 'val1', var2 => val2 ) эквивалентен func("var1", 'val1', "var2", val2). Этот же список, по сути, будет и при типичной инициализации хэша через стрелки. Поэтому в присваивании хэшу списка @_ нет ничего загадочного.

silent
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.