2

我正在使用AI::ExpertSystem::Advanced从 Web 内容运行专家系统。

我有一个网站,我在其中使用以下代码运行 Perl 脚本:

use strict;
use warnings;

use AI::ExpertSystem::Advanced;
use AI::ExpertSystem::Advanced::KnowledgeDB::Factory;
use Data::Dumper;
use File::Slurp;

open(LOG, ">C:\\xampp\\htdocs\\xampp\\bc\\log.txt");

print LOG "START EXPERT\n";
system("C:\\Perl\\bin\\perl C:\\xampp\\htdocs\\xampp\\bc\\create_yaml.pl");

print LOG "START CREATE DB\n";
my $yaml_kdb = AI::ExpertSystem::Advanced::KnowledgeDB::Factory->new('yaml', {
    filename => 'C:\\xampp\\htdocs\\xampp\\bc\\recepty.yaml'
});

print LOG "LOAD RECEPTY\n";
my $text = read_file(
    'C:\\xampp\\htdocs\\xampp\\bc\\knowledgebase.yaml',
    array_ref => 1,
    chomp     => 1
);

print LOG "LOAD DB\n";
my $ai = AI::ExpertSystem::Advanced->new(
    viewer_class  => 'terminal',
    knowledge_db  => $yaml_kdb,
    initial_facts => $text
);

print LOG "NEW ES\n";
$ai->mixed();

print LOG "RESULT DONE\n";
#$ai->summary();
close LOG;

我试图创建一个日志。当我在终端中运行此源时,我的日志已满,一切正常。但是当我从网络上运行它时,它出了点问题。我的日志文件只有:

START EXPERT
START CREATE DB
LOAD RECEPTY
LOAD DB

我认为创建新的专家系统是不好的。链接或者我不知道。你怎么看?

我的本地服务器错误:

Compilation failed in require at C:/Perl/lib/Term/ReadLine/Perl.pm line 65. 
The system cannot find the path specified. Unable to get Terminal Size. 
The Win32 GetConsoleScreenBufferInfo call didn't work. 
The COLUMNS and LINES environment variables didn't work. 
The resize program didn't work. at C:/Perl/lib/Term/ReadKey.pm line 362. 
Compilation failed in require at C:/Perl/lib/Term/ReadLine/Perl.pm line 65.
4

1 回答 1

1

(最初作为对如何在 perl 中找到错误位置的重复问题的答案提交)

问题中的错误消息表明错误被抛出C:/Perl/lib/Term/ReadKey.pm line 362use Term::ReadKey出现在C:/Perl/lib/Term/ReadLine/Perl.pm line 65。如果您在 CGI 环境中运行此代码,则使用 ReadLine/ReadKey 毫无意义,并且它们无法初始化也就不足为奇了。

但是,您正在使用 创建 ExpertSystem 实例viewer_class => 'terminal',这会导致它使用AI::ExpertSystem::Advanced::Viewer::Terminal,“扩展自 AI::ExpertSystem::Advanced::Viewer::Base及其主要目的是与(控制台)终端“(强调我的)进行交互,它使用 ReadLine 来做到这一点。为了完成这项工作,您需要使用不“与(控制台)终端交互”的不同查看器类。

不幸的是,搜索 metacpan找不到其他可用的查看器,因此您需要在其他地方找到一个(AI::ExpertSystem::Advanced 的作者可能知道在哪里可以找到用于 CGI 的查看器)或编写自己的查看器类.

于 2013-05-25T11:21:45.793 回答