I would use hashes.
#!/usr/bin/perl -w
use strict;
my %names = (
'john' => 'brown',
'jacob' => 'black',
'jingle' => 'gray',
'heimer' => 'greene',
'smitz' => 'purple' );
my %fullnames;
foreach my $firstname (keys %names) {
$fullnames{$firstname . " " . $names{$firstname}} = 1;
}
print "$_\n" foreach (keys %fullnames);
This way, index and order does not matter. If order matters, you can put "sort" before "keys". Not without weakness, but I like to do as much as possible along these lines. As the data gets large, the required data goes up, but search by first name is logarithimic rather than linear. You can also make a reverse hash, so that storing either way is less expensive. Then, if you need large amounts of data, you should consider pointing the hashes to arrays. You might also consider references, although I am not Monk enough to pull that off right now.