Consider a driver script “646_SoPW.pl”:

use strict; use warnings; use MyTest; while (<DATA>) { chomp; print "MAIN: >$_<\n"; } #MyTest::run(); while (<MyTest::DATA>) { chomp; print "MAIN: >$_<\n"; } __DATA__ 32 wilma 16

run in conjunction with a module “Test.pm” (in a separate file):

package MyTest; use strict; use warnings; sub run { while (<DATA>) { chomp; print "TEST: *$_*\n"; } close DATA; } 1; __DATA__ TEST 1 2 3

Output:

14:19 >perl 646_SoPW.pl MAIN: >32 wilma 16< MAIN: >TEST 1 2 3< 16:04 >

As can be seen, the data section in the module is accessed via __DATA__ from within the module (i.e., within package MyTest), but via MyTest::DATA from within a different package.

But you get the same effect by uncommenting the call to MyTest::run() and using that in place of the second while loop in the driver script. Calling MyTest::run() is better practice as it maintains the encapsulation of the MyTest module.

Note: Trying to combine the two approaches is much more difficult, as it means resetting the DATA handle in the MyTest package. So far, my experiments with open, close, and seek have been less than encouraging. But trying to read the same DATA section twice is probably a bad idea anyway.

Update: ++poj for the link below. The solution is given in Re^2: __DATA__, seek, and tell — change sub run in “MyTest” to:

sub run { my $datapos = tell DATA; while (<DATA>) { chomp; print "TEST: *$_*\n"; } seek DATA, $datapos, 0; }

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,


In reply to Re: Using __DATA__ from a package by Athanasius
in thread Using __DATA__ from a package by yoda54

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.