On 4/10/06, Ed <[EMAIL PROTECTED]> wrote: > Thanks for the reply. > > Yes, I see I fat fingered the owner/some_owner variable. > > It does compile on my system (if I omit use strict). I should add that > I'm running Perl 5.6.1 because some of the code I'm maintaining needs > this version. > > Except for the last 7 lines where I'm trying to print out the field > elements, I pulled all the code from here: > http://www.unix.org.ua/orelly/perl/prog3/ch32_06.htm > > Again, this compiles on my system if I omit use strict. If I add use > strict it instructs me that I need to > Global symbol "$store" requires explicit package name at > classexample.pl line 18. > Global symbol "$store" requires explicit package name at > classexample.pl line 19. > ... > > If I specify > $Shoppe::store = Shoppe->new(); > and > $Shoppe::store->owner('Abdul Alhazred'); > etc, > It passes the use strict specification, but it still fails at > print "owner: $Shoppe::store->owner()\n"; > $some_owner = $Shoppe::store->owner(); > print "owner: $some_owner\n"; > > If I omit use strict it prints out the > Do I need to put the Class definition in a separate file and call it a > package, and then instruct my script to "use Shoppe"? That doesn't > seem right. > > I'm pretty stumped, so thanks for your help. I think I'm pretty close. > > Ed
My advice? stay away frmo Class::Struct if you can. What does it give you that a plain od HoA won't? That said, for motives that have never been clear to me--i guess just a blind desire to imititate C for reasons unknown--declaring an element to be of a strct type doesn't save you from having to initialize it. Better still, you can't even initialize it in the declaration, you have to call new later. you can do that either when you call new on the parent struct, or any time before you want to use it. I've given both examples below. Also, the solution to getting errors under use strict is to fix the errors, not turn off use strict. If you don't understand lexical scoping, pick up any basic Perl book, or ask here. The code below is tested: #!/usr/bin/perl -w use strict; use Class::Struct; struct ( Manager => { # Creates a Manager->new() constructor. name => '$', # Now name() method accesses a scalar value. salary => '$', # And so does salary(). started => '$', # And so does started(). }); struct ( Shoppe => { # Creates a Shoppe->new() constructor. owner => '$', # Now owner() method accesses a scalar. addrs => '@', # And addrs() method accesses an array. stock => '%', # And stock() method accesses a hash. boss => 'Manager', # Initializes with Manager->new(). }); my $store = Shoppe->new(); # or my $store = Shoppe->new('boss'=>Manager->new()); $store->owner('Abdul Alhazred'); $store->addrs(0, 'Miskatonic University'); $store->addrs(1, 'Innsmouth, Mass.'); $store->stock("books", 208); $store->stock("charms", 3); $store->stock("potions", "none"); # skip next line if 'boss' initialized above $store->boss(Manager->new()); $store->boss->name('Prof L. P. Haitch'); $store->boss->salary('madness'); $store->boss->started(scalar localtime); print "owner: $store->owner"; # prints ref # you want print "owner: ", $store->owner"; my $owner = $store->owner; print "owner: $owner"; print "addrs: $store->addrs"; # see above my @some_addrs = $store->addrs; print "addrs: @some_addrs"; HTH, -- jay -------------------------------------------------- This email and attachment(s): [ ] blogable; [ x ] ask first; [ ] private and confidential daggerquill [at] gmail [dot] com http://www.tuaw.com http://www.dpguru.com http://www.engatiki.org values of β will give rise to dom!