On Tuesday 22 Dec 2009 04:20:30 Parag Kalra wrote:
> Hi Shlomi,
> 
> Thanks for your valuable comments. Will definitely keep it in mind in
>  future scripts.

You're welcome.

> 
> 
> > I've ran it and I still cannot figure out the bug.
> 
> 
> 
> Here is the bug -
> 
> pa...@station3:/tmp$ perl /tmp/oops.pl
> Chetak goes Neigh
> Chetak eats Long grass
> Chetak has Brown color
> An unamed Horse goes Neigh
> An unamed Horse eats Long grass
> *An unamed Horse has  color*

Well, the code for that is:

<<<<<<<<
Horse->new();
Horse->speak;
Horse->eat('Long grass');
Horse->color;
>>>>>>>>

Where sub color is:

<<<<<<<<
sub color {
        $class = shift;
        print $class->name, " has ", ${$class}{Color}, " color\n";
    }
>>>>>>>>

Now ${$class}{Color} gets evaluated to ${"Horse"}{Color} which is actually 
$Horse{Color} (only a package variable) - the value of %Horse hash indexed by 
the key "Color". This is a symbolic reference which "use strict;" would have 
caught, but in your case it evaluates to undef.

You can try defining a sub _color { ... } method accessor similar to the "sub 
name", but you should really rethink your entire strategy here. I can't think 
of any reason why the current duality of class methods and instance methods in 
your code should be preserved.

Regards,

        Shlomi Fish

> Chimpu goes Baaah
> Chimpu eats Small grass
> Chimpu has White color
> An unamed Sheep goes Baaah
> An unamed Sheep eats Small grass
> *An unamed Sheep has  color*
> pa...@station3:/tmp$
> 
> As shown in the above output color for unnamed Horse is not getting
>  printed.
> 
> Cheers,
> Parag
> 

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
Interview with Ben Collins-Sussman - http://shlom.in/sussman

Bzr is slower than Subversion in combination with Sourceforge. 
( By: http://dazjorz.com/ )

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to