Object references and Class::Struct

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

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");
$aaa->childs("bbb" => $bbb);

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

print $->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


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

tia, stephan

Re: Object references and Class::Struct

Quoted text here. Click to load it

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.

Re: Object references and Class::Struct

On 2008-02-22, rthangam wrote:
Quoted text here. Click to load it

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

'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  => '$',
print $->foo, "\n";

This works for whatever object I want to store.

greetings, stephan

Site Timeline