Search code examples
perlmason

map perl looping from value


I am not able to understand why following code is not working.

<%method getvivekBox>
  <%args>
   $BoxName
  </%args>

  <%perl>
    return {
      type        => 'vivek',
    };
  </%perl>
</%method>




<%method getAll>
 <%args>
  $BoxGroup
  $indexex
 </%args>
  <%perl>
    my $x =  map { $m->comp('SELF:getvivekBox' , BoxName => "$BoxGroup-$_"); } @$indexex;

    return $x;
  </%perl>
</%method>

I am calling getAll with arguments , box and (1..10). It is returning 11 but expected behavior for me it should return 10 elements.


Solution

  • map on a list produces another list. You are assigning the result of the map to a scalar, thus getting the number of elements assigned to $x.

    Change $x to @x, or put [] around the map (to make $x an array reference).