2016-11-11 92 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