如何调试Perl CGI脚本?

如何调试Perl CGI脚本?,perl,apache,debugging,ssh,expect,Perl,Apache,Debugging,Ssh,Expect,我从一台正在被删除的旧服务器继承了一个遗留的Perl脚本。该脚本需要在新服务器上实现。我把它放在新服务器上了 剧本很简单;它通过expect和ssh连接到网络设备并收集数据。出于调试目的,我只处理从设备收集接口列表的部分 新服务器上的脚本总是在重新加载后的5秒内向我显示一个页面。它很少包含来自远程设备的接口列表。最常见的是,它包含除接口列表之外的所有HTML元素 现在,在旧服务器上,有时脚本需要20秒才能输出数据。那很好 基于此,新服务器上的apache似乎在Perl脚本返回数据之前就显示了数据

我从一台正在被删除的旧服务器继承了一个遗留的Perl脚本。该脚本需要在新服务器上实现。我把它放在新服务器上了

剧本很简单;它通过expect和ssh连接到网络设备并收集数据。出于调试目的,我只处理从设备收集接口列表的部分

新服务器上的脚本总是在重新加载后的5秒内向我显示一个页面。它很少包含来自远程设备的接口列表。最常见的是,它包含除接口列表之外的所有HTML元素

现在,在旧服务器上,有时脚本需要20秒才能输出数据。那很好

基于此,新服务器上的apache似乎在Perl脚本返回数据之前就显示了数据,尽管这肯定是不正确的

其他信息: 不幸的是,我不能发布任何代码工作策略。然而,我很确定这不是expect的问题。expect部分写为expect或die'error msg',我看不到错误消息。但是,如果我将expect timeout设置为0,那么我确实会看到错误消息


脚本中使用的预期超时值通常为20秒。。。但是正如我前面提到的,apache在大约5秒后显示脚本中的静态内容,95%的时间不显示应该从expect中检索的内容。此外,脚本会将expect内容写入驱动器上的文件,即使页面没有显示它。

您也可以尝试。我不需要亲自尝试,但我看到了,它看起来棒极了。

我刚刚添加了Stackoverflow指南:

不幸的是,我把水晶球留在家里了,但我可以想象Expect脚本正在等待一些预定义的超时,而不是匹配输出。请发布一些代码。这里的变量太多,无法给出准确的答案。它可能是缓冲区刷新的差异、perl/expect的不同版本,甚至与访问网络设备有关的用户权限等等。我猜这不是apache的问题。很可能它只是显示脚本提供给它的数据。在命令行上运行脚本时会发生什么情况?您必须进一步隔离问题;可能会在那时发布一些代码的净化版本。另请参阅