Perl映射传递参数
发布时间:2020-12-15 23:20:45 所属栏目:大数据 来源:网络整理
导读:我正在尝试使用我自己的子程序map().当我使用Perl的内置函数尝试它时,它可以工作.但是当我用自己的子程序尝试map()时,它失败了. 我无法指出导致错误的原因. 这是代码片段. #!/usr/bin/perl use strict; sub mysqr { my ($input) = @_; my $answer = $input *
我正在尝试使用我自己的子程序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"; 解决方法
Map始终将参数列表的元素分配给$_,然后计算表达式.因此映射mysqr($_),1,5在每个元素1,5上调用mysqr,因为$_设置为1,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,5); # works now (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |