$ENV{'USER_AGENT'}で得られる文字列から、ブラウザ名とバージョンを抜き出す関数を作っています。
正規表現のせの字もわからんような状態から何とかあちこち検索かけてここまで作りました。
しかし、まだ正規表現のありがたみが足りない気がして、不満です。
よければもっと要約できる点、あるいは不備な点の指摘をお願いします。ちなみに、書き込みのためにここでは全角でインデントいます。コピペの際にご留意下さい。
#-----------------------#
# UA一般名化         #-----------------------------------------------------#
#-----------------------#
# 引数は、($ENV{'USER_AGENT'})
sub envUa2uaName{
 my ($UA) = $_[0];
 if($UA =~ /MSIE/){
  $UA =~ s/(.){0,}MSIE ([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/InternetExplorer $2/;
 }
 elsif($UA =~ /Opera/){
  $UA =~ s/(.){0,}Opera(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Opera $3/;
 }
 elsif($UA =~ /Safari/){
  $UA =~ s/(.){0,}Safari(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Safari $3/;
 }
 elsif($UA =~ /Netscape/){
  $UA =~ s/(.){0,}Netscape(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Netscape $3/;
 }
 elsif($UA =~ /Firebird/){
  $UA =~ s/(.){0,}Firebird/Firebird/;
 }
 elsif($UA =~ /^Mozilla/){
  $UA =~ s/Mozilla\/([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Mozilla $1/;
 }
 $UA =~ s/([a-z A-Z 0-9]{0,})\/([0-9]{1,}(\.){0,}[0-9]{0,})/$1 $2/g;
 return $UA;
}