I'd agree about using a structure and walking it, rather than using that giant if/elsif/statement, but I wouldn't recommend using a hash in this case, without knowing more about the problem.
The example given doesn't specify what is in $row[4], and the regexes given don't lock the match to the full width of the string. Now, it's possible that the original poster intended to match something more like:
m/^ENG$/i; m/^AVN$/i; m/^TRAN$/i ...etc
But with what's given, the item being matched might contain 'QMI' (matches 'QM' and 'MI') or 'POLICE TRAN' (again, matches more than one), and so the order that the searches are done might be significant.
If the items being matched are the full width of the string, then the order isn't significant, but I'd probably not use regexes:
my %matches = ( ENG => 'EN', AVN => 'AV', TRAN => 'TN', QM => 'QM', MI => 'MI', POLICE => 'MP', MP => 'MP', CHAPLAIN => 'CH', INF => 'IN', FA => 'FA', MED => 'MD', SIG => 'SC', MAIN => 'SS', AR => 'AR', ); if ( exists ( $match{uc($row[4])} ) { $row[3] = $match{uc($row[4])}; } else { $row[3] = 'PU'; }
In reply to Re^2: Updating database question
by jhourcle
in thread Updating database question
by curtisb
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |