问题中的错误消息表明错误被抛出C:/Perl/lib/Term/ReadKey.pm line 362
并use Term::ReadKey
出现在C:/Perl/lib/Term/ReadLine/Perl.pm line 65
。
但是,对该问题的评论表明您正在尝试在 CGI 环境中运行此代码。鉴于 Readline 的目的是在从终端 [*] 读取一行输入时提供附加功能,因此在 CGI 上下文中使用它是没有意义的,我一点也不惊讶它在那里不起作用.
根据 metacpan,AI::ExpertSystem::Advanced不依赖于 Term::ReadLine::Perl,也不依赖于它的任何依赖项。Term::ReadLine::Perl 必须被代码的其他部分使用。要解决此问题,请找到该部分代码 ( grep -ir readline /my/source/tree
) 并将其更改为根本不使用 Readline 或检测它是在命令行上运行还是在 CGI 下运行,并且仅require Term::ReadLine::Perl
在命令行上运行。
编辑:追溯您之前关于此问题的问题,我看到您正在使用 创建 ExpertSystem 实例viewer_class => 'terminal'
,这导致它使用AI::ExpertSystem::Advanced::Viewer::Terminal,“从 AI:: ExpertSystem::Advanced::Viewer::Base其主要目的是与(控制台)终端交互。” (强调我的)为了完成这项工作,您需要使用不“与(控制台)终端交互”的不同查看器类。不幸的是,搜索 metacpan 找不到其他可用的查看器,因此您需要在其他地方找到一个(AI::ExpertSystem::Advanced 的作者可能知道您可以在哪里获得一个用于 CGI 的查看器)或编写自己的查看器类.
[*] 来自Term::ReadLine::Perl5文档:
GNU Readline 从具有 emacs 或 vi 编辑功能的交互式终端读取行。它提供了保存先前输入历史的机制。
此包通常用于命令行界面和 REPL(读取、评估、打印循环)。