¿Cómo amplío las variables en los controladores de readpipe de Perl?

Parece que las variables en backticks no se expanden cuando se pasan a la función readpipe. Si anulo la función readpipe, ¿cómo puedo expandir las variables?

BEGIN {
*CORE::GLOBAL::readpipe = sub {print "Run:@_\n"};
}

`ls /root`;
my $dir = "/var";
`ls $dir`;

Ejecutando esto da:

Run:ls /root
Run:ls $dir

Estoy intentando burlar llamadas externas para un código de prueba que estoy escribiendo. Si hay un módulo de CPAN en algún lugar que pueda ayudar en el cuidado de todo esto, eso también ayudaría.

Actualizar:

He decidido usar una solución muy fea para mi problema. Resulta que usandoreadpipe() En lugar de backticks expande las variables correctamente. Estoy utilizando un limpiador automático de scripts antes de ejecutar mis pruebas, lo que convierte todos los backticks areadpipe() Antes de ejecutar las pruebas.

por ejemplo, en ejecución:

$ cat t.pl

BEGIN {
    *CORE::GLOBAL::readpipe = sub {print "Run:@_\n"};
}

`ls /root`;
my $dir = "/var";
`ls $dir`;
readpipe("ls $dir");

Da:

$ perl t.pl
Run:ls /root
Run:ls $dir
Run:ls /var

Sin embargo, todavía estoy buscando una solución más limpia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta