Я пишу программу, которую могут использовать другие. Одна из спецификаций проекта - использовать библиотеку Perm Term :: ReadLine :: Gnu. У большинства пользователей этого не будет, и я хочу установить его во время работы программы.
Итак, когда пользователь запускает программу, у него нет установленной библиотеки. Моя программа установит их для них, пока они используют программу с помощью менеджера пакетов ОС.
Вот как я проверяю модуль
require Term::ReadLine;
my $Readline_Support = 1;
eval { require Term::ReadLine::Gnu }
or $Readline_Support = 0;
Я использую переменную $ Readline_Support для перенаправления терминала, использования файла истории и т. Д.
$OUT = $TERMINAL->OUT if $readline_installed;
if ($readline_installed)
{
# save every answer and default, good or not, to the history file
$TERMINAL->add_history($Ans);
$TERMINAL->append_history(1, HIST_FILE);
}
К сожалению, я получаю эту ошибку при попытке использовать файл истории:
Невозможно найти метод объекта "using_history" через пакет "Term :: ReadLine :: Stub" в ./msi.pl, строка 618, строка 2.
строка 618 -
$TERMINAL->using_history();
Что является первым использованием объекта $ TERMINAL.
Кто-нибудь имел опыт установки модулей Perl во время работы сценария и последующего использования модулей в этом же сценарии?
Хорошо ... Спасибо Энди, если модуль не установлен, это работает
# I removed the require Term::ReadLine; here
my $Readline_Support = 1;
eval { require Term::ReadLine::Gnu }
or $Readline_Support = 0;
ниже в коде
if ($readline_installed)
{
# Required for the dynamic loading of Term::ReadLine::Gnu
require Term::ReadLine;
$TERMINAL = Term::ReadLine->new ('ProgramName')
if $Interactive or $Brief
}
Теперь, однако, проверка на установленный мод всегда терпит неудачу, я думаю, потому что
require Term::ReadLine::Gnu;
нужно
require Term::ReadLine;
рано в коде, как старый
require Term::ReadLine;
my $Readline_Support = 1;
eval { require Term::ReadLine::Gnu }
or $Readline_Support = 0;