Передавая ссылку в качестве аргумента и не называя ее в Perl - PullRequest
0 голосов
/ 21 июня 2019

поэтому у меня есть что-то вроде этого:

@result = myfun \@args;

Я хочу сделать что-то вроде этого:

sub myfun{
foreach (@@_){ $_ = $_**2; } #foreach element the argument is referring to square the element
return @@_; # return the list that the argument is referring to
}

Есть ли способ сделать это?

Ответы [ 3 ]

2 голосов
/ 21 июня 2019

Как упоминалось ранее, можно просто использовать

sub myfun { map { $_ ** 2 } @{ $_[0] } }

my @args = 1..5;
say for myfun(\@args);

Но нужно задаться вопросом, почему вы хотите передать ссылку.Следующее проще:

sub myfun { map { $_ ** 2 } @_ }

my @args = 1..5;
say for myfun(@args);

Если у вас есть ссылка на внешнюю сторону, вы всегда можете сгладить ее там, а не в подпункте.

sub myfun { map { $_ ** 2 } @_ }

my $args = [ 1..5 ];
say for myfun(@$args);
2 голосов
/ 21 июня 2019

Вы можете попробовать:

my @args = 1..5;
my @result = myfun( \@args );
say for @result;

sub myfun{
    map {$_**2} @{$_[0]};
}

выход

1
4
9
16
25
1 голос
/ 22 июня 2019

Как сказать Perl, выбрать элемент @_ и разыменовать его без создание дополнительных ссылок или переменных?

Чтобы разыменовать элемент @_, скажем, $_[0], вы заключаете его в {} и помещаете его в любой тип синтаксиса, где у вас будет имя переменной (исключая сигилу). Например. @{$_[0]} вместо @array или ${$_[0]}[0] вместо $array[0].

См. http://perlmonks.org? Node = References + quick + reference для дополнительных примеров.

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