Wie erweitere ich Variablen in Perl-Readpipe-Handlern?

Es scheint, dass Variablen in Backticks nicht erweitert werden, wenn sie an die Readpipe-Funktion übergeben werden. Wie kann ich Variablen erweitern, wenn ich die Readpipe-Funktion überschreibe?

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

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

Laufen diese gibt:

Run:ls /root
Run:ls $dir

Ich versuche, externe Anrufe für einen Testcode, den ich schreibe, zu verspotten. Wenn es irgendwo ein CPAN-Modul gibt, das dabei helfen kann, all dies zu erledigen, würde das auch helfen.

Aktualisieren:

Ich habe mich entschlossen, eine wirklich hässliche Problemumgehung für mein Problem zu verwenden. Es stellt sich heraus, dass mitreadpipe() anstelle von Backticks werden Variablen korrekt erweitert. Ich verwende vor dem Ausführen meiner Tests einen automatischen Skriptbereiniger, der alle Backticks in konvertiertreadpipe() vor dem Ausführen der Tests.

z. B. Laufen:

$ cat t.pl

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

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

Gibt:

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

Ich bin immer noch auf der Suche nach einer saubereren Lösung.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage