There are two errors in the code:
my $normalized = my $numdiv / $numden;
You declare $numdiv again with my, resetting it's value, this should have produced a warning.
foreach my $element(@array) { # loop over args
...
my $normalized = my $numdiv / $numden; # normalize
}
return $normalized;
You make a $normalized variable local to the loop and try to return it outside, this shouldn't compile with strict vars.
Using warnings and strict will help you catch simple mistakes like these.
You can use $element to modify the array (it is an alias, not a copy).
$numden is not dependent on the array element, so there is no need to calculate it each time.
This should work:
use List::Util qw( min max );
sub normalizer {
my @array = @_;
my $min_numarray = min @array;
my $max_numarray = max @array;
my $numden = $max_numarray - $min_numarray;
foreach my $element (@array) {
my $numdiv = $element - $min_numarray;
$element = $numdiv / $numden;
}
return @array;
}