in reply to Dealing with Names

I presume your problem is that you have the names stored disassembled in an array. So reassemble the names using a character that won't occur in the name text as a part separator, perform the fix up, then disassemble the string again:

use strict; use warnings; my $match = join '|', 'Von', 'De La', 'De', 'La'; my @names = map {chomp; [split]} split "\n", <<NAMES; Daniel R Von Vanderschmidt Daniel Von Vanderschmidt Daniel De La Silvia Daniel De Silvia Daniel La Silvia NAMES for my $name (@names) { my $nameStr = join '~', @$name; $nameStr =~ s/~($match)~/~$1 /g; $name = [split '~', $nameStr]; } print join ('|', @$_), "\n" for @names;

Prints:

Daniel|R|Von Vanderschmidt Daniel|Von Vanderschmidt Daniel|De La Silvia Daniel|De Silvia Daniel|La Silvia

Perl reduces RSI - it saves typing