另一个Perl-beginner问题,但奇怪的是,我找不到教程来解释这个简单的问题.
作为练习,我希望编写一个函数map,它接受一个函数和一个数组,返回一个数组.在函数式语言中,经常使用它,我听说了子引用以及如何使用它们.
sub map {
my $f = shift;
my @r = ();
foreach (@_) {
push(@r, &f($_));
}
return @r;
}
sub square {
my $r = shift;
return $r*$r;
}
print map(\&shift, 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,我只得到这个词CODE和一个十六进制数作为输出,五次.然后,我已经改变了呼叫f中map,以$$f($_)和$f->($_)而这一切有同样的结果.
我在这做错了什么?
perl具有增强map功能.我们称之为map2
使用&$f取消引用$f
用于join正确打印数组
sub map2 {
my $f = shift;
my @r = ();
foreach (@_) {
push(@r, &$f($_));
}
return @r;
}
sub square {
my $r = shift;
return $r*$r;
}
print join ",", map2(\&square, 1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
$ perl 1.pl
1,4,9,16,25
Run Code Online (Sandbox Code Playgroud)