Подделка стандартного ввода для функции XS - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь протестировать функцию, которая читает из стандартного ввода, перенаправляя стандартный ввод для чтения из файла, более или менее, как рекомендовано здесь

Вот скрипт:

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

...