use warnings; use strict; my @array = ( 'foo bar quux bam', 'foi bir quix bim', 'foe ber quex bem', 'foa bor quax bom', ); my $inst1 = '4 A -4 C -4 B 2 D'; my @result1; my @inserts; $inst1 =~ /[\d+-]+(?: \w ([\d+-]+)(?{push @inserts, $1}))*/g; for my $line (@array) { my $index = 0; $line =~ s/\b /' '.$inserts[$index++].' '/eg; push @result1, $line; } print join "\n", @result1;