2016-11-11 10 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:コードサンプルの中にある場合は、$ aprs_position \ n "'しか印刷できません。 – Borodin

+0

@Borodinいいえ、上記のコードに2回表示されます。エラーを報告している行がわからなければ、解決できません。 – 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:はい。本質的に、関数呼び出しのパラメータの1つは範囲外であり、どちらが容易かはわかりません。デバッガに慣れていない場合は、一連の 'print'文を追加して、' make_position'に渡す値を表示させてみることができます(これはとても奇妙なことです)。 – Borodin