如何调试从PHP文件调用的Perl

如何调试从PHP文件调用的Perl,php,perl,debugging,Php,Perl,Debugging,我现在在家里工作(在一个星期天!),我试图弄清楚为什么我的Perl脚本从调用它的地方返回NULL到PHP。但是,我不知道如何调试Perl脚本本身。PHP文件返回一条警告,指出我试图对非数组对象执行数组操作(因为PHP实际返回的预期数组为NULL)。Web服务器的日志也只记录了此警告-没有Perl错误 服务器上是否有存储特定“外部”日志的位置?或者,有没有更好的方法来调试从主PHP文件所需的PHP文件运行的Perl文件?调试是不必要的(我不需要调试模式),但我希望至少看到错误或警告。您可以在Per

我现在在家里工作(在一个星期天!),我试图弄清楚为什么我的Perl脚本从调用它的地方返回NULL到PHP。但是,我不知道如何调试Perl脚本本身。PHP文件返回一条警告,指出我试图对非数组对象执行数组操作(因为PHP实际返回的预期数组为NULL)。Web服务器的日志也只记录了此警告-没有Perl错误


服务器上是否有存储特定“外部”日志的位置?或者,有没有更好的方法来调试从主PHP文件所需的PHP文件运行的Perl文件?调试是不必要的(我不需要调试模式),但我希望至少看到错误或警告。

您可以在Perl脚本的顶部添加以下代码:

sub debug_log
{
    open my $log_fh, ">>", "/tmp/debug.log";
    print $log_fh $_[0];
    warn $_[0];
    close $log_fh;
}

$SIG{__WARN__} = \&debug_log;
$SIG{__DIE__} = \&debug_log;

这样,所有警告和
die
消息都应该在
/tmp/debug.log

中结束。您可以更改Perl脚本的源代码以添加一些调试代码吗?@bart我确实可以这样做。我会写什么?你能自己运行Perl程序而不使用php吗?你知道什么进去了,什么出来了吗?你有shell访问权限吗?@simbabque没有,我只能通过服务器从PHP文件运行该文件。我没有shell访问权限。(否则我只需从shell运行脚本。)因此调试器不是一个选项。这是一个良好的开端,但了解该计划应该做什么也很重要。我想你也不能安装任何模块,因为你没有shell访问权限。将@bart的解决方案与一堆
warn
语句结合起来,可能使用Data::Dumper,您应该能够找到问题所在。tmp目录是相对于Perl文件本身(即该脚本的姊妹)、PHP文件还是主PHP文件?因为乍一看我找不到它。指定为
open
参数的路径是绝对路径,因此您应该在
/tmp
中有一个文件。如果没有文件,则表示没有警告,或者脚本没有死亡。您可以使用
warn“debug test”测试警告是否正确记录就在
$SIG…
行之后。