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.