我正在尝试使用我自己的子程序map().当我使用Perl的内置函数尝试它时,它可以工作.但是当我用自己的子程序尝试map()时,它失败了.我无法指出导致错误的原因.
这是代码片段.
#!/usr/bin/perl
use strict;
sub mysqr {
my ($input) = @_;
my $answer = $input * $input;
return $answer;
}
my @questions = (1,2,3,4,5);
my @answers;
@answers = map(mysqr, @questions); # doesn't work.
@answers = map {mysqr($_)} @questions; #works.
print "map = ";
print join(", ", @answers);
print "\n";
Run Code Online (Sandbox Code Playgroud)
Map始终为参数列表分配元素$_
,然后计算表达式.因此,对每个元素1,2,3,4,5进行map mysqr($_), 1,2,3,4,5
调用mysqr
,因为$_
依次设置为1,2,3,4,5中的每一个.
您$_
在调用内置函数时经常可以省略的原因是,许多Perl内置函数(如果没有给出参数)将$_
默认运行.例如,该lc
功能执行此操作.你的mysqr
功能没有这样做,但如果你改变它来做这个,第一个表格将起作用:
sub mysqr {
my $input;
if (@_) { ($input) = @_ }
else { $input = $_ } # No argument was given, so default to $_
my $answer = $input * $input;
return $answer;
}
map(mysqr, 1,2,3,4,5); # works now
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
500 次 |
最近记录: |