On Wednesday, 07 December 2011 13:32:01 Tuomo Salo wrote:
> Please do not do that.
>
> When you use a "my" variable outside a subroutine, you create a variable
> that is completely invisible from anywhere outside of that file.
Just my 2¢: Of course it is completely valid to use a my variable outside a
function. Just keep in mind that it keeps its state across invocations.
As for your example, why don't you reimplement output() in your subclass?
If I understand you correctly, you'd rather:
--------------
package MyClass;
our $class_level_attribute = "I Am MyClass";
...
--------------
and later:
-------------
package SubClass;
use base MyClass;
$MyClass::class_level_attribute = "I want to be SubClass";
-------------
Now suppose for a moment another subclass:
-------------
package SubClass2;
use base MyClass;
$MyClass::class_level_attribute = "I want to be SubClass2";
-------------
What do you expect MyClass->new->output to print?
You can prevent confusion by:
-------------
package SubClass;
use base MyClass;
sub output {
local $MyClass::class_level_attribute = "I want to be SubClass";
shift->SUPER::output(@_);
}
-------------
Now you really rely on an implementation detail of MyClass. Let's hope this
usage of $MyClass::class_level_attribute is documented.
Torsten Förtsch
--
Need professional modperl support? Hire me! (http://foertsch.name)
Like fantasy? http://kabatinte.net