Object references and Class::Struct

S

Stephan Mann

Hi!

I need to create a double linked tree so I want to use objects and
therefore read the Class::Struct manual and the Perl FAQ entry. One
thing I can't figure out though is how to store a object reference.

The following code works, and stores references in the childs hash:


use strict;
use warnings;
use Data::Dumper;
use Class::Struct qw(struct);

struct FooBar => {
foo => '$',
bar => '$',
parent => 'FooBar',
childs => '%',
};

my $aaa = new FooBar(foo => "aaa", bar => "AAA");
my $bbb = new FooBar(foo => "bbb", bar => "BBB");
$bbb->parent($aaa);
$aaa->childs("bbb" => \$bbb);

print Dumper($aaa);
print Dumper($bbb);

print ${$aaa->childs("bbb")}->foo, "\n";
print $bbb->parent->foo, "\n";


According to the manual, I should be able to define

parent => '*FooBar'

and store a object reference in it. But I then can't assign a value any
longer. Both

$bbb->parent($aaa);
$bbb->parent(\$aaa);

give me a "parent argument is wrong class" error. So how do I store a
object reference in a struct?!

tia, stephan
 
R

rthangam

Hi!

I need to create a double linked tree so I want to use objects and
therefore read the Class::Struct manual and the Perl FAQ entry. One
thing I can't figure out though is how to store a object reference.

The following code works, and stores references in the childs hash:

use strict;
use warnings;
use Data::Dumper;
use Class::Struct qw(struct);

struct FooBar => {
foo => '$',
bar => '$',
parent => 'FooBar',
childs => '%',

};

my $aaa = new FooBar(foo => "aaa", bar => "AAA");
my $bbb = new FooBar(foo => "bbb", bar => "BBB");
$bbb->parent($aaa);
$aaa->childs("bbb" => \$bbb);

print Dumper($aaa);
print Dumper($bbb);

print ${$aaa->childs("bbb")}->foo, "\n";
print $bbb->parent->foo, "\n";

According to the manual, I should be able to define

parent => '*FooBar'

and store a object reference in it. But I then can't assign a value any
longer. Both

$bbb->parent($aaa);
$bbb->parent(\$aaa);

give me a "parent argument is wrong class" error. So how do I store a
object reference in a struct?!

tia, stephan

An object is perl is a reference which knows which class it belongs to
so simply passing $aaa should be enough, which you have done it anyway
in your code.

1. An object is simply a reference that happens to know which class
it belongs to.
2. A class is simply a package that happens to provide methods to
deal with object references.
3. A method is simply a subroutine that expects an object reference
(or a package name, for class methods) as the first argument.
 
S

Stephan Mann

An object is perl is a reference which knows which class it belongs to
so simply passing $aaa should be enough, which you have done it anyway
in your code.

1. An object is simply a reference that happens to know which class
it belongs to.
2. A class is simply a package that happens to provide methods to
deal with object references.
3. A method is simply a subroutine that expects an object reference
(or a package name, for class methods) as the first argument.

Okay -- but this is kind of confusing, since Data::Dumper shows the one as
a reference, but the other one not. So I got the feeling I'm copying
values.

'FooBar::childs' => {
'bbb' => \bless( {

'FooBar::parent' => bless( {

However, I've now taken a different approach. Since I need multiple
objects but can't use inheritance because Class::Struct doesn't allow
@ISA and Export won't work because I don't have multiple files, I'll now
use a scalar to store my reference.

parent => '$',
....
$bbb->parent(\$aaa);
....
print ${$bbb->parent}->foo, "\n";

This works for whatever object I want to store.

greetings, stephan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,007
Latest member
obedient dusk

Latest Threads

Top