Jak rozszerzyć zmienne w procedurach obsługi czytników Perl?

Wydaje się, że zmienne w backticksach nie są rozwijane po przekazaniu ich do funkcji readpipe. Jeśli przesłonię funkcję readpipe, jak rozwinąć zmienne?

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

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

Uruchomienie tego daje:

Run:ls /root
Run:ls $dir

Próbuję wyszydzać wywołania zewnętrzne w poszukiwaniu kodu testowego, który piszę. Jeśli jest gdzieś moduł CPAN, który może pomóc w tym wszystkim, to też by to pomogło.

Aktualizacja:

Postanowiłem zastosować naprawdę brzydkie obejście mojego problemu. Okazuje się, że używareadpipe() zamiast backticksów poprawnie rozszerza zmienne. Korzystam z automatycznego czyszczenia skryptów przed uruchomieniem testów, które konwertują wszystkie kopie zapasowe nareadpipe() przed uruchomieniem testów.

np. Bieg:

$ cat t.pl

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

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

Daje:

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

Wciąż szukam czystszego rozwiązania.

questionAnswers(2)

yourAnswerToTheQuestion