クラス コンストラクター内にディスパッチ テーブルを作成しようとしています。以下のエラーで実行が失敗します。
エラー: ../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");
}
問題を理解して解決するのを手伝ってください。