How's this?
$ head -n 1 *.pm
==> AA.pm <==
package AA; use base qw/Exporter/; our @EXPORT=qw/$knob1/; our $knob1
+= 'no'; 1
==> BB.pm <==
package BB; use AA; our @ISA=qw/AA/; our @EXPORT=qw/$knob1/; 1
==> CC.pm <==
package CC; use BB; our @ISA=qw/BB/; our @EXPORT=qw/$knob1/; 1
$ perl -MCC -MBB -lwe '$BB::knob1=42; print for $AA::knob1, $BB::knob1
+, $CC::knob1'
42
42
42
Note, however, that the following *doesn't* work. (use base doesn't call import)
$ head -n 1 *.pm
==> AA.pm <==
package AA; use base qw/Exporter/; our @EXPORT=qw/$knob1/; our $knob1
+= 'no'; 1
==> BB.pm <==
package BB; use base qw/AA/; our @EXPORT=qw/$knob1/; 1
==> CC.pm <==
package CC; use base qw/BB/; our @EXPORT=qw/$knob1/; 1
$ perl -MCC -MBB -lwe '$BB::knob1=42; print for $AA::knob1, $BB::knob1
+, $CC::knob1'
no
42
Use of uninitialized value in print at -e line 1.