Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

DATA Handle

by pike (Monk)
on Sep 05, 2001 at 18:31 UTC ( [id://110302]=perlquestion: print w/replies, xml ) Need Help??

pike has asked for the wisdom of the Perl Monks concerning the following question:

Dear Fellow Monks, I'm having a problem with DATA. I wrote a module ParfileReader and put some configuration data at the end of the file, after __DATA__. But when I execute the code, I get a message: readline() on unopened filehandle ParfileReader::DATA at the line where I try to read from DATA. What really dazzles me is that I tried this before in another module and it worked perfectly well. Does anybody out there know what the problem is?

Replies are listed 'Best First'.
Re: DATA Handle
by larryk (Friar) on Sep 05, 2001 at 18:33 UTC
    If one of the subs in the module is trying to read from DATA then the __DATA__ has to be in the module file.

    Since even I don't understand what I just wrote - I'll rephrase ;-)

    • The __DATA__ tag has to be in the module if the code reading from <DATA> is in the module.
    • If you are reading from DATA in the .pl file then the __DATA__ has to be in the .pl file (although in this case you can use __END__ interchangeably with __DATA__).
    • You cannot (AFAIK) read from __DATA__ in another file.

    Hope this helps.

       larryk                                          
    perl -le "s,,reverse killer,e,y,rifle,lycra,,print"

      larryk, you can read a __DATA__ that is in another file.

      Imagine you have a perl module called Store_Config.pm, which has some information in it's __DATA__ tags that you need to read. If you know the namespace that the __DATA__ handle is in, you can do this to read it:

      use strict; use Store_Config; use Symbol qw(qualify_to_ref); #Pull the reference to the __DATA__ handle my $fh = qualify_to_ref(DATA => 'Store_Config'); #$fh can now be acted on like a file handle read($fh, my $config, -s $fh); print "Store_Config.pm's __DATA__ content is: [$config]\n";
      I have the data in the same file from which I try to read them - but the problem was, I also defined a package ParfileRecord in the same file. So when I read from ParfileRecord::DATA, everything is fine. Thank you for getting me on the right track. pike
Re: DATA Handle
by converter (Priest) on Sep 05, 2001 at 21:12 UTC

    Just use <PACKAGENAME::DATA>. Works for me.

    conv

    Update: Just noticed that pike already applied this. Just ignore me, I'll go take a nap.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://110302]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (1)
As of 2024-04-24 13:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found