I now understand what "my %hash = map { split } @names_marks;" does - splits the array of elements into keys and values - each array element contains a name and a score delimited by space. The 'map' can be replaced by a 'for' loop to achieve the same result.
With regard to name uniqueness, the program that I'm testing will need to parse a large number of entries (names of pupils for a particular schooling level and their scores for a certain subject). I want to be able to deal with situations where there is more than one person with the same name. My approach was to append a person's name to her score to make the name unique. But as you've pointed out, if the two persons have the same score, the name (key) will still not be unique. I'm still thinking how I could get around that problem. Any advice will be appreciated :)