Perl映射传递参数

前端之家收集整理的这篇文章主要介绍了Perl映射传递参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用我自己的子程序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

猜你在找的Perl相关文章