use strict; use warnings; my $needed_ys = 7; my $str = 'Why do you need 7 ys when cll you hve re as and cs'; my $orig = $str; my @stash = qw(a c); my @existing = $str =~ /y/g; my $missing = $needed_ys - @existing; foreach my $letter (@stash) { while ( $missing > 0 ) { last unless $str =~ s/$letter/y/; $missing -= 1; } } print 'Original: ', $orig, "\n"; print 'Result: ', $str, "\n";