Как я могу отправить встроенный оператор Backticks Perl?

StackOverflow https://stackoverflow.com/questions/3678655

Вопрос

Я хотел бы установить модуль мою программу Perl, которая использует BackTicks. Есть ли способ издеваться от backticks, чтобы они сделали бы что-то отличное от выполнения внешней команды?

Другой вопрос показывает, что мне нужно, но в Руби. К сожалению, я не могу выбрать использовать Ruby для этого проекта, и я не хочу избежать отзывов.

Это было полезно?

Решение

Ты сможешь* издеваться в встроенный readpipe функция. Perl позвонит вашей макету, когда она сталкивается с обратными концами или qx выражение.

BEGIN {
  *CORE::GLOBAL::readpipe = \&mock_readpipe
};

sub mock_readpipe {
  wantarray ? ("foo\n") : "foo\n";
}

print readpipe("ls -R");
print `ls -R`;
print qx(ls -R);


$ perl mock-readpipe.pl
foo
foo
foo

* - если у тебя есть Perl версия 5.8.9. или позже.

Другие советы

Вместо того, чтобы использовать backticks, вы можете использовать capture от IPC :: Система :: Просто, А затем напишите макет версии захвата () в тесте вашего устройства.

# application
use IPC::System::Simple qw(capture);
my $stuff = capture("some command");

# test script
{
     package IPC::System::Simple;
     sub capture
     {
         # do something else; perhaps a call to ok()
     }
}

# ... rest of unit test here
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top