0

我正在尝试在类构造函数中创建调度表。执行失败并出现以下错误。

错误: 在 ../lib/Parser.pm 的子例程条目中使用了未初始化的值。在 ../lib/Parser.pm 使用“strict refs”时,不能使用字符串 ("") 作为子例程 ref

代码:

package parser;

use strict;
use warning;

@packet = ("join","release","status");
#constructor 
sub new {
        my ($class) = shift;
        my $self = {
           _callerMDN => shift,
           _calleeList => shift,
           _serverIp => shift,
           _packetHandler => {
                join => \&joinHandler, #Dispatch table,variable "join" stores func reference
                release => \&releaseHandler, #variable "release" stores func reference
                status => \&statusHandler #variable "stores" stores func reference
                },
           _mdnHandler => {},

        };

        print ("The Server IP = $self->{_serverIp}\n") if ($debug);
        print ("CallerMDN = $self->{_callerMDN}\n") if ($debug);
        print ("TcpDump File Name = $self->{_tcpdumpFile}\n") if ($debug);

    bless( $self, $class );
    return $self;

}

sub start {
    my ($self,$data) = @_;
    if ($data ~= "Incoming Packet") {
         $self->{_packetHandler}->{$packet[0]}->($data);#**Error while calling "joinHandler" function**
    }
    elsif ($data ~= "Outgoing Packet"){
         $self->{_packetHandler}->{$packet[1]}->($data);#**Error while calling "releaseHandler" function**
    }
    else {
         $self->{_packetHandler}->{$packet[2]}->($data);#**Error while calling "statusHandler" function**
    } 

}

sub joinHandler {
    my ($self,$data) = @_;
    #parse packet
    print ("Incoming Packet parsed");
}

sub releaseHandler {
   my ($self,$data) = @_;
   #parse packet
   print ("Outgoing packet parsed");
}

sub statusHandler {
    my ($self,$data) = @_;
    #parse packet
    print ("status packet");
}

请帮助我理解和解决问题。

4

2 回答 2

1

我看到不少问题。

  1. use warning;应该use warnings;

  2. 你忘了my @packet在你的顶部package

  3. sub start你有=~向后作为~=eq但无论如何,它可能应该是。

  4. $debug没有在任何地方声明。

perl -c当您遇到问题时,您可能会发现利用 , 检查语法(也运行 BEGIN 块)很有用。

于 2013-05-03T06:17:35.490 回答
0

看看你的条件语句。尝试这个:

$data eq "Incoming Packet"

还有一些小错别字:使用警告;并且 $debug 变量未初始化。

希望有帮助。

于 2013-05-03T06:16:38.437 回答