Я хочу написать подпрограмму Perl, как это:
use List::MoreUtils qw{pairwise};
sub multiply {
my ($a, $b) = @_;
return [ pairwise {$a * $b} @$a, @$b ];
}
(умножение просто Например, я собираюсь сделать что-то еще)
Однако это дает мне бессмысленные результаты, потому что Perl запутывается и пытается использовать внешние $a
и $b
вместо элементов списка.
Если я пытаюсь этот код в REPL (например, как reply
):
0> use List::MoreUtils qw{pairwise};
1> my $a = [1, 2, 3];
…
2> my $b = [3, 2, 1];
…
3> pairwise {$a * $b} @$a, @$b;
Can't use lexical $a or $b in pairwise code block at reply input line 1.
4> sort {$a <=> $b} @$a;
"my $a" used in sort comparison at reply input line 1.
"my $b" used in sort comparison at reply input line 1.
$res[2] = [
1,
3,
2
]
До сих пор мое решение было заменяющим my ($a, $b) = @_;
с my ($a_, $b_) = @_;
(то есть переименованием проблемных переменными).
Есть ли другое решение?
Не вызывайте переменные '$ a' и' $ b', которые являются первыми именами переменных? – Sobrique