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

0 ответов

Другие вопросы по тегам