Como faço 25 solicitações de cada vez com HTTP :: Async em Perl?

Estou fazendo muitas solicitações HTTP e escolhi o HTTP :: Async para fazer o trabalho. Tenho mais de 1000 solicitações para fazer, e se eu simplesmente fizer o seguinte (veja o código abaixo), muitas solicitações expirarão quando forem processadas, pois pode levar dezenas de minutos até que o processamento chegue a elas:

for my $url (@urls) {
    $async->add(HTTP::Request->new(GET => $url));
}
while (my $resp = $async->wait_for_next_response) {
    # use $resp
}

Então, decidi fazer 25 solicitações por vez, mas não consigo pensar em uma maneira de expressá-las no código.

Eu tentei o seguinte:

while (1) {
    L25:
    for (1..25) {
        my $url = shift @urls;
        if (!defined($url)) {
            last L25;
        }
        $async->add(HTTP::Request->new(GET => $url));
    }
    while (my $resp = $async->wait_for_next_response) {
        # use $resp
    }
}

No entanto, isso não funciona bem porque é muito lento agora. Agora, ele aguarda até que todas as 25 solicitações tenham sido processadas até que ele adicione outras 25. Portanto, se houver duas solicitações restantes, ele não fará nada. Tenho que esperar que todas as solicitações sejam processadas para adicionar o próximo lote de 25.

Como eu poderia melhorar essa lógica para fazer$async faça alguma coisa enquanto processo registros, mas também garanta que eles não tenham tempo limite.