use strict;
use warnings;
use feature qw{ say };
my $str;
my $minY;
$str = q{accyyaycayaccyyaaycy};
$minY = 15;
say $str;
my $yCt = $str =~ tr{y}{};
my @aPosns;
push @aPosns, pos $str while $str =~ m{(?=a)}g;
my @cPosns;
push @cPosns, pos $str while $str =~ m{(?=c)}g;
while ( ( $yCt < $minY ) && @aPosns )
{
my $offset = splice @aPosns, rand @aPosns, 1;
substr $str, $offset, 1, q{y};
$yCt ++;
}
while ( ( $yCt < $minY ) && @cPosns )
{
my $offset = splice @cPosns, rand @cPosns, 1;
substr $str, $offset, 1, q{y};
$yCt ++;
}
say $str;
####
accyyaycayaccyyaaycy
yycyyyycyyyccyyyyycy
####
accyyaycayaccyyaaycy
accyyaycyyaccyyyaycy