PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 507


Проблема

Вы хотите, чтобы пользователь мог отредактировать строку перед тем, как отсы­лать ее вам для чтения.

Решение

Воспользуйтесь стандартной библиотекой Term::ReadLine в сочетании с модулем Term::ReadLine::Gnu с CPAN:

use Term: .'ReadLine;

$term = Term: :Readl_ine->new("APP DESCRIPTION"); $OUT = $term->0UT || *STDOUT;

$term->addhistory($fake_line); $line = $term->readline(PROMPT);

print $0UT "Any program output\n";


15.11. Редактирование входных данных   537

Комментарий

Программа из примера 15.4 работает как простейший командный интерпретатор. Она читает строку и передает ее для выполнения. Метод read line читает строку с терминала с поддержкой редактирования и вызова истории команд. Вводимая пользователем строка автоматически включается в историю команд.

Пример 15.4. vbsh

#!/usr/bin/perl -w

# vbsh - очень плохой командный интерпретатор

use strict;

use Term::ReadLine;

use POSIX qw(:sys_wait_h);

my $term = Term: :Readl_ine->new("Simple Shell"); my $0UT = $term->0UT()   ||   *STDOUT; my $cmd;

while (defined ($cmd = $term->readline('$  ')  ))  { my ©output =  '$cmd'; my $exit_value    = $? » 8; my $signal_num    = $? & 127; my $dumped_core = P & 128; printf $OUT "Program terminated with status %d from signal %d%s\n",

$exit_value,   $signal_num,

$dumped_core ">  "  (core dumped)"   :   ""; print ©output;

$term->addhistory($seed_line); }

Чтобы занести в историю команд свою строку, воспользуйтесь методом

addhistory:

$term->addhistory($seed_line);

В историю нельзя заносить больше одной строки за раз. Удаление строк из ис­тории команд выполняется методом remove_history, которому передается индекс в списке истории: 0 соответствует первому (самому старому) элементу, 1 — вто­рому и т. д. до самых последних строк.

$term->remove_history($line_number);

Для получения списка истории команд используется метод GetHistory:

©history = $term->GetHistory;




Содержание  Назад  Вперед