2013-05-03 59 views
0

我想在类构造函数中创建调度表。执行失败,出现下面提到的错误。在perl里面的类构造函数中创建调度表

错误: 在../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"); 
} 

请帮我了解并解决问题。

回答

0

看看你的条件陈述。 试试这个:

$data eq "Incoming Packet" 

有一些细微的拼写错误也: 使用警告; 和$ debug变量未初始化。

希望有所帮助。

1

我看到不少问题。

  1. use warning;应该use warnings;

  2. 你在你的package

  3. 顶部忘记my @packetsub start你有=~倒退为~=。但它可能应该是eq反正。

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

您可能会发现它有用采取perl -c优势,检查语法(也运行BEGIN块也行),当你遇到问题。

相关问题