En Perl, error 'Uso del valor no inicializado en el iterador de sustitución' para la variable $ 1

Trabajando a partir de un ejemplo encontrado en otro lugar dondestackoverflow.com Estoy intentando reemplazar en la enésima instancia de una coincidencia de expresiones regulares en una cadena en Perl. Mi código es el siguiente:

#!/usr/bin/env perl
use strict;
use warnings;

my $num_args = $#ARGV +1;
if($num_args != 3) {
        print "\nUsage: replace_integer.pl occurance replacement to_replace";
        print "\nE.g. `./replace_integer.pl 1 \"INTEGER_PLACEHOLDER\" \"method(0 , 1, 6);\"`";
        print "\nWould output: \"method(INTEGER_PLACEMENT , 1, 6);\"\n";
        exit;
}

my $string =$ARGV[2];

my $cont =0;
sub replacen { 
        my ($index,$original,$replacement) = @_;
        $cont++;
        return $cont == $index ? $replacement: $original;
}

sub replace_quoted {
        my ($string, $index,$replacement) = @_;
        $cont = 0; # initialize match counter
        $string =~ s/[0-9]+/replacen($index,$1,$replacement)/eg;
        return $string;
}

my $result = replace_quoted ( $string, $ARGV[0] ,$ARGV[1]);
print "RESULT: $result\n";

por

./replace_integer.pl 3 "INTEGER_PLACEHOLDER" "method(0, 1 ,6);"

Esperaría una salida de

RESULT: method(0, 1 ,INTEGER_PLACEHOLDER);

Lamentablemente obtengo una salida de

RESULT: method(,  ,INTEGER_PLACEHOLDER);

Con estas advertencias / errores

Use of uninitialized value in substitution iterator at ./replace_integer.pl line 26.
Use of uninitialized value in substitution iterator at ./replace_integer.pl line 26.

La línea 26 es la siguiente:

$string =~ s/[0-9]+/replacen($index,$1,$replacement)/eg;

He determinado que esto se debe a que $ 1 no se ha inicializado. Según tengo entendido, $ 1 debería tener el valor de la última coincidencia. Dado mi expresión regular muy simple ([0-9]+) No veo ninguna razón por la que no se deba inicializar.

Soy consciente de que hay formas más fáciles de encontrar y reemplazar la enésima instancia en sed, pero requeriré las referencias hacia adelante y hacia atrás de Perl una vez que se supere este obstáculo (no es compatible con sed)

¿Alguien sabe la causa de este error y cómo solucionarlo?

Estoy usando Perl v5.18.2, construido para x86_64-linux-gnu-thread-multi

Gracias por tu tiempo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta