c:\@Work\Perl\monks>perl -wMstrict -le
"use constant T => q{UK Mobile - Vodafone [GBRVF] [MSRN]};
;;
my $dest = T;
$dest =~ s{ \] \s+ \S+ \z }{}xms;
print qq{2 steps: a: '$dest'};
;;
$dest =~ s{ \W+ }{_}xmsg;
print qq{2 steps: b: '$dest'};
;;
$dest = T;
;;
$dest =~ s{ \W+ (\w+ \] \z)? }{ $1 ? '' : '_' }xmsge;
print qq{1 step: '$dest'};
"
2 steps: a: 'UK Mobile - Vodafone [GBRVF'
2 steps: b: 'UK_Mobile_Vodafone_GBRVF'
1 step: 'UK_Mobile_Vodafone_GBRVF'
####
c:\@Work\Perl\monks>perl -wMstrict -le
"my $dest = q{UK Mobile - Vodafone [GBRVF] [MSRN]};
;;
my @xlate = ('', '_');
;;
$dest =~ s{ \W+ (\w+ \] \z)? }{$xlate[! $1]}xmsg;
print qq{'$dest'};
"
'UK_Mobile_Vodafone_GBRVF'
##
##
c:\@Work\Perl\monks>perl -wMstrict -le
"my $dest = q{UK Mobile - Vodafone [GBRVF] [MSRN]};
;;
$dest =~ tr{A-Za-z}{_}cs;
$dest =~ s{ _ [^_]+ _ \z }{}xms;
;;
print qq{'$dest'};
"
'UK_Mobile_Vodafone_GBRVF'
##
##
c:\@Work\Perl\monks>perl -wMstrict -le
"my $dest = q{UK Mobile - Vodafone [GBRVF] [MSRN]};
$dest =~ s{ \W+ (\w+ \] \z)? }{ [ '', '_' ]->[! $1] }xmsge;
print qq{'$dest'};
"
'UK_Mobile_Vodafone_GBRVF'