http://www.perlmonks.org?node_id=344580


in reply to inheritance and __DATA__

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

Replies are listed 'Best First'.
Re: Re: inheritance and __DATA__
by thpfft (Chaplain) on Apr 13, 2004 at 09:49 UTC

    Thank you. Worked very nicely.