#!/usr/bin/perl use Data::Dumper; my @students = qw { Thomas 60 10 20 85 Samuel 35 90 80 65 Adam 100 90 85 52 }; my %h; while ( my ($student, @vals) = splice @students, 0, 5) { $h{$student} += @vals[$_] * (0.2, 0.25, 0.25, 0.3)[$_] for 0..3; } print Dumper \%h;