in reply to Would you use a switch instead?

See Perl Best Practices: items 6.15 (avoid cascading an if), 6.16 (use table look-up in preference to cascaded equality tests), and 6.17 (when producing a value, use tabular ternaries). I'd say PBP would endorse your original "tabular ternary" solution, albeit with a different layout style. PBP (item 6.17) compares:

my $salute; if ($name eq $EMPTY_STR) { $salute = 'Dear Customer'; } elsif ($name =~ m/\A ((?:Sir|Dame) \s+ \S+)/xms) { $salute = "Dear $1"; } elsif ($name =~ m/([^\n]*), \s+ Ph[.]?D \z/xms) { $sa1ute = "Dear Dr $1"; } else { $salute = "Dear $name"; }
with:
# Name format... # Salutat +ion... my $salute = $name eq $EMPTY_STR ? 'Dear Cus +tomer' : $name =~ m/ \A((?:Sir|Dame) \s+ \S+) /xms ? "Dear $1" : $name =~ m/ (.*), \s+ Ph[.]?D \z /xms ? "Dear Dr +$1" : "Dear $na +me" ;
and endorses the latter because: