First off, this iteration is significantly improved over the last version. This is a very good thing!
Secondly, I'm glad you found my response useful. That you choose not to use hashes is your own business. I just call'em as I see'em.
A few thoughts on your current solution:
- Good usage of my. I commend you.
- While chomp does work over a list, I had to look that up just now. I suspect that most Perl'ers wouldn't know that, either. I'd recommend commenting that. (Or, I'm just stupid, which is a distinct possibility!)
- chomp the line, then split it. It's more intuitive. Or, just do the chomp over @matched. Plus, you chomp @record when it's already been chomped above. That's redundant.
- You can find a better variable name than $lic. Don't shorten a variable name. You'll spend more time trying to figure out what that variable was than typing a longer name. Or, since you only use it once, why even create it?
- You do a grep twice through @phoneBook. It's better to get the matches, then check to see if you have any. Only one grep, which can be an expensive action.
- If you only want to work with the first match, why loop through all the matches? If you only want the first, use $lines[0] or, even better, discard all the matches but the first.
- If you're doing something across 5 records, use an arrayslice or a for-loop. It's harder to read if it's all written out. I know that if I see five explicit accesses to an array, I'm looking for a reason. Hopefully, the reason isn't that the writer doesn't know about slicing or for-loops. :)
chomp @matched;
foreach my $match (@matched) {
my @record = split(/,/, $match);
my ($lname, $fname) = split(/\s+/, uc($record[5]));
my $name = "$lname " . substr($fname, 0, 2);
if (my ($first_matched) = grep /$name/, @phoneBook) {
my @line = split /,/, $first_matched;
print RESULTS "$record[0],UNKNOWN,$record[$#record],SLC,";
print RESULTS "$line[$_]," for (0 .. 4);
print RESULTS "$name\n";
} else {
print UNMATCHED "$record[$_]," for (0,5,7,2,3,4);
print UNMATCHED "UNKNOWN,\\N,\\N\n";
}
}
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.