$str =~ tr/-/ /; #replace - with a space
$str =~ tr/a-zA-Z/ /cs; #replace non letter with a space
####
$w =~ s/(\p{isLower})(\p{isUpper})/$1 $2/g or
$w = ucfirst( lc($w) );
####
#!/usr/bin/perl
use strict;
use warnings;
while ( my $t = ) {
chomp $t;
printf "orig: %-30s translated: %s\n", $t, translate($t);
}
sub translate {
my $str = shift;
$str =~ tr/a-zA-Z/ /cs; #replace non letter with a space
my @words = split( /\s+/, $str );
foreach my $w (@words) {
#insert a space when a upper case is inside a word
$w =~ s/(\p{isLower})(\p{isUpper})/$1 $2/g or
$w = ucfirst( lc($w) ); # we are using side effect of foreach loop
}
return join( ' ', @words );
}
__DATA__
Acierno James S., Jr.
Acierno James, Jr.
Ackermann-Hirschi L.
Agatonovic-Jovini T.
Alba-Castro Jose-Luis
Alconada Verzini M. J.
AlconadaVerzini M. J.
Alvarez Fernandez A.
Alvarez-Bolado Gonzalo
Alvarez-Gonzalez B.
AlvarezGonzalez B.
AlvarezPiqueras D
Amor Dos Santos S. P.
Amor DosSantos S. P.
AmorDosSantos S. P
da Costa F. Barreiro Guimaraes
Dano Hoffmann M.
DanoHoffmann M.
Dell' Acqua A.
Dell' Asta L.
Dell'Acqua A.
Dell'Asta L.
Dell'Omo Giacomo
della Volp D.
della Volpe D.
Della Volpe D.
DeRegie J. B. De Vivie
Derendarz D.
deRenstrom P. A. Bruckman
Dupl'akova Nikoleta
Duplakova Nikoleta
Faucci Giannelli M.
Fauccigiannelli M.
FaucciGiannelli M.
Yusuff I.
Yusuff' I.
Yao W-M
Yao W-M.
Yao W. -M
Yao W. -M.