Brutha has asked for the wisdom of the Perl Monks concerning the following question:
I just learned another lesson about variable scope, names and packages, but I am not sure which of my solutions should be prefered.
I have a quite great number (about 40) of slightly different objects, so I created a base class and used a macro to generate the code for the specialized subclasses with their differing attribute, which is a constant list of values (simplified, untested code):
package Baseclass; # common attributes and methods sub use_values { croak ("Abstract class"); } package Subclass_1; use base 'Baseclass'; my @values = (...); sub use_values { ... } package Subclass_2; use base 'Baseclass'; my @values = (...); sub use_values { ... }
This did not work, as the package statement does not affect the scope of @values.
One solution would be to name them different (e.g. @Subclass_1_values), which would keep me typing the rest of the day and does not increase readability.
One solution would be to wrap it in a function:
Does that initialize the list everytime the method is called? Not very efficient then.package Subclass_1; use base 'Baseclass'; sub use_values { my @values = (...); ... }
Next try is a local scope:
package Subclass_1; use base 'Baseclass'; { my @values = (...); sub use_values { ... } }
Should work, but I do not like the increased indenting.
What else can I try? What are your experiences?
Thank You for comments.
And it came to pass that in time the Great God Om spake unto Brutha, the Chosen One: "Psst!"
(Terry Pratchett, Small Gods)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Multiple Package in one file with equal named variables
by rinceWind (Monsignor) on Jan 27, 2006 at 09:57 UTC | |
by Brutha (Friar) on Jan 27, 2006 at 10:20 UTC | |
|
Re: Multiple Package in one file with equal named variables
by ysth (Canon) on Jan 27, 2006 at 11:03 UTC | |
by Fletch (Bishop) on Jan 27, 2006 at 13:45 UTC | |
|
Re: Multiple Package in one file with equal named variables
by Roy Johnson (Monsignor) on Jan 27, 2006 at 15:56 UTC | |
by Brutha (Friar) on Jan 30, 2006 at 07:41 UTC | |
by Roy Johnson (Monsignor) on Jan 30, 2006 at 17:06 UTC |