Como faço para expandir variáveis ​​em manipuladores de leitura de perl?

Parece que as variáveis ​​nos backticks não são expandidas quando passadas para a função readpipe. Se eu substituir a função readpipe, como expandir variáveis?

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

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

Correndo isso dá:

Run:ls /root
Run:ls $dir

Eu estou tentando zombar de chamadas externas para um código de teste que estou escrevendo. Se houver um módulo CPAN em algum lugar que possa ajudar a cuidar de tudo isso, isso também ajudaria.

Atualizar:

Eu decidi usar uma solução muito feia para o meu problema. Acontece que usandoreadpipe() em vez de backticks expande as variáveis ​​corretamente. Eu estou usando um limpador de script automático antes de executar meus testes que converte todos os backticks parareadpipe() antes de executar os testes.

por exemplo, em execução:

$ cat t.pl

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

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

Dá:

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

Ainda estou procurando uma solução mais limpa.

questionAnswers(2)

yourAnswerToTheQuestion