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.