On Wed, Mar 27, 2002 at 09:05:02PM -0800, bob ackerman wrote:

> 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?
> 

No apparently this is not the code that gives me the error
message!

Below is the code that gives me the same error message.

#!/usr/bin/perl -w 

my $cd = CD::Music->new(                "Canon in D", "Pachelbel",
                                                "Boering Mussak GmbH", 
"1729-67836847-1",
                                                1,
                                                8,8,
                                                5.0);





# How many CDs in the entire collection?
print "The number of CDs is ",CD::Music->get_count, "\n";

package CD::Music;
use strict;

{
        my $_count = 0;
        sub get_count           {$_count}
        my $_incr_count = sub {++$_count};#create an anonymous subroutine

        

        sub new{
                $_incr_count->();#call anonymous subroutine

#############################################
# Instead I could put this code?:
# my $_incr_count = sub {++$_count};
#$_incr_count->();
###############################################

        $_incr_count->();       #call the anonymous subroutine
                                        #Gives me an error message shown below

                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;
        }
}


########################################################
#ERROR MESSAGE WITH 'use strict' COMMENTED:
#
#Use of uninitialized value in subroutine entry at 
#/home/paul/bin/test16.pl line 27.
#Undefined subroutine &main:: called at /home/paul/bin/test16.pl 
#line 27.
########################################################

########################################################
#ERROR MESSAGE WITH 'use strict'
#Use of uninitialized value in subroutine entry at 
#/home/paul/bin/test16.pl line 27.
#Can't use string ("") as a subroutine ref while "strict refs" 
#in use at /home/paul/bin/test16.pl line 27.
########################################################


Again, I believe that the reference to the anonymous subroutine
expires once I start the 'new' subroutine. If I put the anonymous
subroutine within the 'new' subroutine block, then the script
executes correctly, and I still make sure that you can't
increment the value of the number of CDs directly.

Thanks!

Paul

-- 

************************
*Paul Tremblay         *
*[EMAIL PROTECTED]*
************************

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to