¿Cómo hago 25 solicitudes a la vez con HTTP :: Async en Perl?

Estoy haciendo muchas solicitudes HTTP y elegí HTTP :: Async para hacer el trabajo. Tengo más de 1000 solicitudes para hacer, y si simplemente hago lo siguiente (vea el código a continuación), muchas solicitudes se agotan en el momento en que se procesan porque pueden pasar decenas de minutos antes de que el procesamiento llegue a ellas:

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

Así que decidí hacer 25 solicitudes por vez, pero no puedo pensar en una manera de expresarlo en código.

Intenté lo siguiente:

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
    }
}

Sin embargo, esto no funciona bien porque es demasiado lento ahora. Ahora espera hasta que se hayan procesado las 25 solicitudes hasta que se agreguen otras 25. Así que si le quedan 2 solicitudes, no hace nada. Tengo que esperar a que todas las solicitudes se procesen para agregar el siguiente lote de 25.

¿Cómo podría mejorar esta lógica para hacer$async haga algo mientras proceso los registros, pero también asegúrese de que no se agote.