使用未初始化的价值

时间:2016-11-11 11:27:46

标签: perl

我正在尝试在下面的代码中调试此警告。

  

在连接(。)中使用未启动的值$ 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返回的值有错误或可能是语法错误?

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

1 个答案:

答案 0 :(得分:2)

这不是语法错误(如果是的话,你的代码根本就不会运行),所以你说得对,你没有得到你期望从你的回复致电Ham::APRS::FAP::make_position()

查看the code for the subroutine,我发现有几件事会导致它返回undef,但作者显然不相信会显示警告,告诉您确切的内容#&# 39;我错了。

如果是我,我会使用调试器来跟踪该子程序的执行情况,以查看它出错的地方。我怀疑代码中涉及$symbols的内容,但我不知道你在那里传递的价值。

我还会在应该设置该变量的行之后添加类似的内容。

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