BEGIN {
package class_vars;
use strict;
use warnings;
sub import {
shift;
my $pkg = caller;
for my $var (@_) {
eval("
package $pkg;
use vars '\$$var';
sub $var {
\$$var = \$_[1] if \@_ > 1;
return \$$var;
}
");
}
}
$INC{'class_vars.pm'} = __FILE__;
}
{
package MyPackage;
use strict;
use warnings;
use class_vars qw( one two three );
sub init_one_from_three {
$one=$three-2;
}
sub new {
my $package=shift;
my $parms=$_[0];
my $this={};
foreach(keys %$parms) {
no strict 'refs';
$$_=$parms->{$_};
}
bless $this, $package;
}
}
{
use strict;
use warnings;
my $p=new MyPackage({three => 3,});
$p->two(2);
$p->init_one_from_three;
printf "one=%d two=%d, three=%d\n", $p->one, $p->two, $p->three;
}
####
one=1 two=2, three=3
##
##
BEGIN {
...
$INC{'class_vars.pm'} = __FILE__;
}