Подделка стандартного ввода для функции XS
Я пытаюсь протестировать функцию, которая читает из стандартного ввода, перенаправляя стандартный ввод для чтения из файла, более или менее, как рекомендовано здесь
Вот сценарий:
use strict;
use warnings;
use Term::EditLine qw(CC_EOF);
use v5.14;
my $el = Term::EditLine->new('progname');
$el->set_prompt ('# ');
$el->add_fun ('bye','desc',sub { say "\nbye"; return CC_EOF; });
$el->parse('bind','-e');
$el->parse('bind','exit','bye');
*STDIN = *DATA;
while (defined($_ = $el->gets())) {
say $_;
}
__DATA__;
goo
gar
exit
Он использует Term::Editline
который вы должны будете установить в первую очередь. В этом случае вместо чтения из (фальшивого) стандартного ввода он выводит меня в подсказку. Вход разработан таким образом, чтобы последний из них, exit
, будет сигнализировать о выходе (как указано в команде выше). Тем не менее, он просто не берет свой ввод от перенаправленного дескриптора. Это может быть тот случай, когда gets
на самом деле это функция, определенная в XS, но это может быть что-то совершенно другое. Любая помощь будет оценена.