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)
In reply to Multiple Package in one file with equal named variables by Brutha
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |