note
mreece
i know what it does, but i don't know why. one problem with complex return values is that you have avoided giving a name to the structure you have created, forcing me to make one up. maybe the subroutine itself names the structure, but it is hard to tell with <i>MySub</i>.
<p>
what is the significance of the first two columns of strings in @somearray? are you creating a hash or a list? what are you offering up as the "readable" alternative?
<p>
without changing the expression itself, any of these would be clearer, depending:
<c>
my %aliases_for_things = map split(/ /,$_,2), map uc, @somearray;
return %aliases_for_things;
</c>
<c>
return map split(/ /,$_,2), map uc, @somearray; # FIRST and LAST names
</c>
<c>
my @labels_and_values = map split(/ /,$_,2), map uc, @somearray;
return @labels_and_values;
</c>
this naming is something you would have to do anyway were you to avoid the maps with the usual foreach...push alternative:
<c>
my @flattened_pairs;
foreach my $thing (@somearray) {
my $upper_thing = uc $thing;
my @pair = split / /, $upper_thing, 2;
push @flattened_pairs, @pair;
}
return @flattened_pairs;
</c>
as i read something like that, i'm mentally transforming it back to maps so i can personally understand it better anyway. the real gain here is not in the refactoring, but in giving a name to the structure you are returning.
606931
606931