2016-11-11 123 views
0

我想在下面的一段代码中调试此警告。使用未初始化的值

在串联使用门外汉价值$ aprs_position的()或者位于/ usr/local/bin目录/ arsed线串207

foreach my $ent (@upd_q) { 

    my $aprs_position = Ham::APRS::FAP::make_position(
     $ent->{'latitude'}, 
     $ent->{'longitude'}, 
     -1,  # speed 
     -1,  # course 
     -10000, # altitude 
     (defined $ent->{'symbol'}) ? $ent->{'symbol'} : '/[', # symbol 
     1,               # compression 
     0               # no ambiguity 
    );                

    print "$aprs_position\n"; 

    my $packet = sprintf('%s>APTR01:!%s', $ent->{'callsign'}, $aprs_position); 

    print "$packet\n"; 

    if ($aprs_enable == 1) { 

     my $ok = $is->sendline($packet); 

     if (! $ok) { 
      $is->disconnect(); 

看来,有或者是一个错误的从Ham::APRS::FAP::make_position回来的值或可能的语法错误?

请开始调试的最佳方式是什么?

+0

哪条线是207? – shawnhcorey

+0

@shawnhcorey:如果它在代码示例中,它只能是'print'$ aprs_position \ n“'。 – Borodin

+0

@Borodin不,它会在上面的代码中出现两次。不知道哪条线路报告错误,无法解决。 – shawnhcorey

回答

2

这不是一个语法错误(如果是的话,你的代码根本无法运行),所以你是对的,你没有得到你想要的回拨Ham::APRS::FAP::make_position()

看着the code for the subroutine,我看到一些事情会导致它返回undef,但作者显然不相信显示一个警告,告诉你到底你有什么错误。

如果是我,我会使用调试器来跟踪该子例程的执行情况,以查看它出错的位置。我怀疑这是代码中涉及$symbols的问题,但我不知道你在那里通过什么值。

我也会在应该设置该变量的行之后添加这样的内容。

die 'Undefined value for $aprs_position' unless defined $aprs_position; 
+1

@AndyK:是的。实质上,函数调用的其中一个参数超出范围,并且没有简单的方法可以确定哪一个参数。 (这是一个非常奇怪的模块。)如果你不熟悉调试器,那么你可以尝试添加一系列'print'语句来显示你传递给'make_position'的值。 – Borodin