加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读