OK, I'm kind of new to Perl (I just learned it a few days ago), and I'm having a ton of trouble with objects. I'm trying to port an IRC bot I made in Python to Perl, since Python can't handle math too well.
Python code:
Code:
class Charclass:
def __init__(self,name,clb,mw,mb,mc,lock,elem):
self.name = name
self.stru = clb[0]
self.stau = clb[1]
self.agiu = clb[2]
self.magu = clb[3]
# Max white/black magic levels
self.mw = mw
self.mb = mb
def showdesc(self,nicknm):
sdat("NOTICE "+nicknm+" :"+self.name+"\r\n")
sdat("NOTICE "+nicknm+" :Level bonus : Str: "+str(self.stru)+", Sta: "+str(self.stau)+", Agi: "+str(self.agiu)+", Mag: "+str(self.magu)+" \r\n")
sdat("NOTICE "+nicknm+" :White level : "+str(self.mw)+"\r\n")
sdat("NOTICE "+nicknm+" :Black level : "+str(self.mb)+"\r\n")
classes["war"] = Charclass("Warrior",[1,1,0,0],0,0,0,0)
Perl code:
Code:
{ package Charclass;
sub new {
my $self = {};
$self->{name} = shift; # line 32
$self->{stru} = shift;
$self->{stau} = shift;
$self->{agiu} = shift;
$self->{magu} = shift;
$self->{mw} = shift;
$self->{mb} = shift;
bless($self);
return $self;
}
sub showdesc {
my $self = shift;
my $fromnick = shift;
print $sock "NOTICE $fromnick :$self->{name}\r\n";
print $sock "NOTICE $fromnick :Stat adjust : Str: $self->{stru}, Sta: $self->{stau}, Agi: $self->{agiu}, Mag: $self->{magu} \r\n";
print $sock "NOTICE $fromnick :White level : $self->{mw}\r\n";
print $sock "NOTICE $fromnick :Black level : $self->{mb}\r\n";
}
}
$classes{"war"} = Charclass->new("Warrior",20,10,0,-10,0,0);
Right now, I have the Perl bot set up to where I can remotely call showdesc from the IRC channel. However, I have no idea what I'm doing here, and every time I try to get it to call showdesc, the following happens:
"Can't call method "showdesc" on an undefined value at rpgbot.pl line 133, <GEN0> line 32."
How do I fix this? Moreover, how do I use objects correctly?