my $string = "This is a only a test"; my %words; my $i = 1; # Assign the order of the words as a key, the word itself as # a value $words{$i++} = $_ foreach(split(' ', $string)); # Delete the word that you want to delete my $deleted_word = delete($words{3}); # Put the word back in $words{3} = $deleted_word; # Join the values back together based on the order of # the keys $string = join(" ", map { $_ = $words{$_} } sort keys %words); print $string . "\n";