Как расширить переменные в обработчиках чтения канала Perl?

Кажется, что переменные в обратных кавычках не раскрываются при передаче в функцию readpipe. Если я переопределю функцию readpipe, как мне расширить переменные?

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

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

Запуск этого дает:

Run:ls /root
Run:ls $dir

Я пытаюсь имитировать внешние вызовы тестового кода, который я пишу. Если где-то есть модуль CPAN, который может помочь позаботиться обо всем этом, это тоже поможет.

Обновление:

Я решил использовать очень уродливый обходной путь для решения моей проблемы. Оказывается, использование readpipe()вместо обратных кавычек корректно раскрывает переменные. Я использую автоматическую очистку скриптов перед запуском тестов, которая преобразует все обратные кавычки в readpipe()перед запуском тестов.

например Выполняется:

$ cat t.pl

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

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

Дает:

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

Я все еще ищу более чистое решение.

5
задан Sandip Bhattacharya 14 June 2012 в 10:26
поделиться