Кажется, что переменные в обратных кавычках не раскрываются при передаче в функцию 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
Я все еще ищу более чистое решение.