@_
- список параметров, передаваемых в подпрограмму. Когда вы используете его в нескалярном контексте, например:
sum_squares (@_)
вы получите список, так что, предположительно, он вернет сумму квадратов всех чисел в этом списке (однако см. Комментарий ниже).
При использовании в скалярном контексте вы получаете длину, поэтому в вашем случае это будет количество элементов в списке функций $@
.
Итак, ваша дисперсионная функция, вероятно (я говорю, вероятно, так как у меня нет доступа к исходному коду sum_squares
), вычисляет:
variance = arr[0]^2 + arr[1]^2 + ... + arr[N-1]^2
--------------------------------------
N - 1
в массиве значений, передаваемых в вашу функцию.
Я должен сказать, что мое понимание дисперсии расходится с этим (хотя я давно уже делал какие-либо статистические данные). Я почти уверен, что он должен включать сумму квадратов разностей между значениями и средним значением, не самих значений. Я подозреваю, что внутри sum_squares
происходит больше, чем предполагает его простое имя.