How can I reference the object when building it with Perl's Class::Struct?

perl

Solution

The problem in `breed2` is that you are trying to refer to a variable that you haven't defined yet. It looks like it is the same name, but it's not the object you are creating. It's a bit of a chicken-and-egg problem.

I'm not so sure that you want an anonymous subroutine like that in that slot anyway. Are you just trying to shorten `$cat->breed->name` to `$cat->breed2`? You can start with `undef` in `breed2` and change its value right after the constructor since you'll have the reference to the object then. However, even if you put a subroutine there, you have to dereference it:

my $cat = Cat->new( name     => 'Socks',
                    kittens  => ['Monica', 'Kenneth'],
                    markings => { socks=>1, blaze=>"white" },
                    breed    => { name=>'short-hair', cross=>1 },
                    breed2   => undef,

                  );
$cat->breed2( sub { $cat->breed->name } );

print "Once a cat called ", $cat->name, "\n";
print "(which was a ", $cat->breed2->(), ")\n";
print "had two kittens: ", join(' and ', @{$cat->kittens}), "\n";

Problem

I am new to object oriented Perl and i have to access member variable of same object in another subrutine of same object. Sample code is here : ``` use Class::Struct; struct Breed => { name => '$', cross => '$', }; struct Cat => [ name => '$', kittens => '@', markings => '%', breed => 'Breed', breed2 => '$', ]; my $cat = Cat->new( name => 'Socks', kittens => ['Monica', 'Kenneth'], markings => { socks=>1, blaze=>"white" }, breed => { name=>'short-hair', cross=>1 }, ** //breed2 => sub { return $cat->breed->name;}** ); print "Once a cat called ", $cat->name, "\n"; **print "(which was a ", $cat->breed->name, ")\n";** print "had two kittens: ", join(' and ', @{$cat->kittens}), "\n"; ``` But i am not sure how to use that $cat->breed->name in subroutine for breed2 ? Can some one help me with this.

Original source