Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Передача массива в функцию через ссылку.


Автор: eXeC001er 28.11.2009, 16:52
Подскажите почему не работает такая конструкция:
Код

my @lines = (123, 31, 43, 654, 567);
funct(\@lines);

sub funct {
    my $lines = @_;

    my @array = @$lines;
.... 
}


в итоге в $lines  "1" а вовсе не ссылка, ну и соответственно конструкция my @array = @$lines; не работает.

если с массивом в функцию передать еще аргумент (переписав немного функцию) то все работает на ура.


в чем фишка?

Автор: ginnie 28.11.2009, 16:55
eXeC001er, правильный вариант

Код

sub funct {
    my ($lines) = @_;

    my @array = @$lines;
.... 
}


у Вас было присвоение в скалярном контексте, поэтому в $lines оказывался размер массива @_.

Автор: Pfailed 28.11.2009, 19:24
А у меня вопрос в тему, но не очень.
Кто-нибудь знает как работает функция push? Почему первым аргументом ей можно передать именно массив, а не ссылку на него?
Правильно ли я понимаю, что на самом perl'e точный аналог (в плане метода передачи аргументов) функции push создать не получится?

Автор: ginnie 28.11.2009, 19:36
Цитата(Pfailed @  28.11.2009,  19:24 Найти цитируемый пост)
Правильно ли я понимаю, что на самом perl'e точный аналог (в плане метода передачи аргументов) функции push создать не получится?

Аналог создать можно, см. http://perldoc.perl.org/perlsub.html#Prototypes.

Автор: Pfailed 28.11.2009, 19:46
ginnie, спасибо, разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)