my string = "foo_a_foo_b_foo_c_foo_d_foo_e_foo_f_foo" my $pattern = "foo" my $better = "bar" my $n = 1; $string =~ s/^(($pattern.*){$n})$pattern/$1$better/; #### "foo_a_foo_b_foo_c_foo_d_foo_e_foo_f_bar" #### "foo_a_bar_b_foo_c_foo_d_foo_e_foo_f_foo"