Why does the variable $verrechnen
have to be created outside the foreach loop?
Because you want it to exist longer than a pass of the loop.
Why is $verrechnen += (@_)
not possible
This is perfectly valid syntax.
Evaluating an array in scalar context returns the number of elements in it, so this adds the number of elements in @_
to $verrechnen
.
For example, if you pass four arguments, @_
will have four elements, and $verrechnen += (@_)
will add four to $verrechnen
.
Of course, that's not what you want to do here.
why is $item
not in scalar context?
Why would you even ask that? $item
is not context-sensitive. It does exactly the same thing in scalar context, list context and void context.
Anyway, $item
is used twice.
The idea of context doesn't make much sense for for my $item
(since it's not in an expression), so let's ignore this use.
The other use is in $verrechnen += $item;
, where $item
is evaluated in scalar context as per Scalar vs List Assignment Operator.
Simplified:
sub average {
my $sum = 0;
$sum += $_ for @_;
return $sum/@_;
}