- A+

Category：Languages

I have an array of 11 elements. Where I want to sum the odd elements including the first and last elements as one scalar and the evens as another.

This is my code I am trying to use map adding 2 to each index to achieve the result but I think I have got it wrong.

`use strict; use warnings; use Data::Dumper; print 'Enter the 11 digiet serial number: '; chomp( my @barcode = //, <STDIN> ); my @sum1 = map { 2 + $_ } $barcode[1] .. $barcode[11]; my $sum1 = sum Dumper( /@sum1 ); # sum2 = l2 + l4 + l6 + r8 + r10; printf "{$sum1}"; `

What is a good way to achieve this?

Sum of even/odd indicies (what you asked for, but not what you want^{[1]}):

`use List::Util qw( sum ); # Or: sub sum { my $acc; $acc += $_ for @_; $acc } my $sum_of_even_idxs = sum grep { $_ % 2 == 0 } 0..$#nums; my $sum_of_odd_idxs = sum grep { $_ % 2 == 1 } 0..$#nums; `

Sum of even/odd values (what you also asked for, but not what you want^{[1]}):

`use List::Util qw( sum ); # Or: sub sum { my $acc; $acc += $_ for @_; $acc } my $sum_of_even_vals = sum grep { $_ % 2 == 0 } @nums; my $sum_of_odd_vals = sum grep { $_ % 2 == 1 } @nums; `

Sum of values at even/odd indexes (what you appear to want):

`use List::Util qw( sum ); # Or: sub sum { my $acc; $acc += $_ for @_; $acc } my $sum_of_vals_at_even_idxs = sum @nums[ grep { $_ % 2 == 0 } 0..$#nums ]; my $sum_of_vals_at_odd_idxs = sum @nums[ grep { $_ % 2 == 1 } 0..$#nums ]; `

Given that you know how many elements you have, you could use the following:

`use List::Util qw( sum ); # Or: sub sum { my $acc; $acc += $_ for @_; $acc } my $sum_of_vals_at_even_idxs = sum @nums[0,2,4,6,8,10]; my $sum_of_vals_at_odd_idxs = sum @nums[1,3,5,7,9]; `

- I included these in case someone needing these lands on this Q&A.