You need to fully qualify the package in which the DATA section you wish to access resides. One way to do so is given below in the flux sub.
Update: Summary (click readmore for full test code and output):
sub flux { my $class = ref shift; my $fh = do { no strict 'refs'; \*{"$class\::DATA"}; }; return "A-flux: " . scalar <$fh>; }
344569.pl
#!/usr/bin/perl use warnings; use strict; use a344569; use b344569; my $a = a344569->new(); my $b = b344569->new(); print "A:\n"; print " ", $a->foo(); print " ", $a->flux(); print "B:\n"; print " ", $b->foo(); print " ", $b->bar(); print " ", $b->flux(); print "Ok\n";
a344569.pm
package a344569; use strict; sub new { return bless {}, shift; } sub foo { return "A-foo: " . scalar <DATA>; } sub flux { my $class = ref shift; my $fh = do { no strict 'refs'; \*{"$class\::DATA"}; }; return "A-flux: " . scalar <$fh>; } 1; __DATA__ This is package A This is package A This is package A This is package A
b344569.pm
package b344569; @ISA = ('a344569'); use strict; sub bar { return "B-bar: " . scalar <DATA>; } 1; __DATA__ This is package B This is package B This is package B This is package B
Produces:
[johnsca@cory tmp]$ ./344569.pl A: A-foo: This is package A A-flux: This is package A B: A-foo: This is package A B-bar: This is package B A-flux: This is package B Ok
bbfu
Black flowers blossom
Fearless on my breath
In reply to Re: inheritance and __DATA__
by bbfu
in thread inheritance and __DATA__
by thpfft
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |