Hi,habe hier eine leicht geänderte Person.pm Klasse die aber mehr tut als sie sollte:
package Person;
use strict;
use Carp;my $debug = 0;
sub new
{
my $class = shift @_;
my $self = {};
$self->{NAME} = undef;
$self->{AGE} = undef;
$self->{PEERS} = [];
bless($self, $class); # but see below
return $self;
}
sub debug
{
my $class = shift;
$debug = shift;
}
sub DESTROY
{
my $self = shift;
if ($debug)
{
carp "Destroying $self " . $self->name;
}
-- ${ $self->{"_CENSUS"} };
}
sub name
{
my $self = shift @_; #
if ($debug == 1)
{
print("debug aktiviert\n");
if (@_) { $self->{NAME} = shift }
}
else
{
if (@_) { $self->{NAME} = shift }
}
return $self->{NAME};
}
sub age
{
my $self = shift @_;
if (@_) { $self->{AGE} = shift }
return $self->{AGE};
}
sub peers
{
my $self = shift @_;
if (@_) { @{ $self->{PEERS} } = @_ }
return @{ $self->{PEERS} };
}
1;
Aufrufendes script:
use Person;
$him = Person->new();
$him->debug(1);
$him->name("monsti");
$him->age(99);
$him->peers( "friday", "shaky", "fettauge" );
push @All_Recs, $him; # save object in array for later
printf "%s is %d years old.\n", $him->name, $him->age;
print "His peers are: ", join(", ", $him->peers), "\n";
printf "Last rec's name is %s\n", $All_Recs[-1]->name;
Ausgabe:
perl Person-main.pl
debug aktiviert
debug aktiviert
monsti is 99 years old.
His peers are: friday, shaky, fettauge
debug aktiviert
Last rec's name is monsti
debug aktiviert
Destroying Person=HASH(0x815fc28) monsti at Person-main.pl line 0
Imho sollte "debug aktiviert" aber nur einmal ausgegeben werden, unzwar dann wenn die methode name aufgerunfen wird?
Datum: 03.08.2006-15:41
