One solution is to grep to find the indices of the elements you wish to multiply, and then feed those indices to map for it to act upon. Here is a function that takes an array ref as the first parameter, and a multiplier as the second parameter. The return value is an array reference to a new array containing the modified values, only for those elements in the original array that "look like numbers."
use strict; use warnings; use Scalar::Util qw{ looks_like_number }; use v5.12; my @array = ( '1', '2', '45', '65', 'what is this' ); my @by2 = @{ multiply( \@array, 2 ) }; say join ', ', @by2; sub multiply { my( $aref, $multiplier ) = @_; return [ map { $aref->[$_] * $multiplier } grep { looks_like_number( $aref->[$_] ) } 0 .. $#{$aref} ]; }
Dave
In reply to Re: cool way of manipulating array elements
by davido
in thread cool way of manipulating array elements
by pashanoid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |