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]