i copied the code as is, and got no error.
are you sure  line #29 is where you are calling $_incr_count->()?
are you sure the code you are executing is what you posted?

On Wednesday, March 27, 2002, at 06:47  PM, Paul Tremblay wrote:

> I am coppying the code below directly from *Object Oriented
> Perl* by Conway. (Error message is below.)
>
>
> package CD::Music;
> #use strict; # turn this off for testing purposes
>
> {
>
>       my $_count = 0;
>       sub get_count           {$_count}
>       my $_incr_count = sub {++$_count};#create an anonymous subroutine
>       $_incr_count->();# it works if I call it here
>
> sub new{
>       $_incr_count->();#call the anonymous subroutine
> #this line above causes the error below
>       
>
> #Isn't this where the anonymous subroutine should go?
>               #my $_incr_count = sub {++$_count};
>
>       
>       my ($class) = @_;
>       bless {
>                       _name   =>      $_[1],  #second value passed to subroutine
>                       _artist =>      $_[2],  #third value passed to subroutine
>                       _publisher =>   $_[3],  #and so on
>                       _ISBN   =>      $_[4],
>                       _tracks =>      $_[5],
>                       _room   =>      $_[6],
>                       _shelf  =>      $_[7],
>                       _rating =>      $_[8],
>               }, $class;
> }
> }
>
> I am getting this error message:
>
> /home/paul/bin/test16.pl
> Use of uninitialized value in subroutine entry at /home/paul/bin/test16.pl
> line 29.
> Undefined subroutine &main:: called at /home/paul/bin/test16.pl line 29.
>
> I am nearly positive that this error message results because the
> reference to the anonymous subroutine expires once I start the
> subroutine new.
>
> Could a more experienced user confirm this?
>
> I believe that the annonymous subroutine (and the other code
> that initializes the counter) should go in the new subroutine
> block. The idea is make sure you can't access the subroutine
> directly. This happens  as long as I make an anonymous
> subroutine--no matter where I put it.
>
> Thanks!
>
> PS: Typos in computer books can really cause you to lose your
> mind. You keep thinking that you typed something wrong!
>
> --
>
> ************************
> *Paul Tremblay         *
> *[EMAIL PROTECTED]*
> ************************
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>

Reply via email to