On 05/02/2012 06:56, Phillip Richcreek wrote:
> A recent post used a nice feature for providing test data to a script.
> (See __DATA__ below) I've seen it before but never understood it. How
> does it work? What signals the end of the data to the  while (my $line
> =<DATA>) { ? Is this a type of here document? Can someone point me
> where it's descibed in the perl doc?

perldata man page:

    Special Literals
     The special literals __FILE__, __LINE__, and __PACKAGE__ represent the
     current filename, line number, and package name at that point in your
     program. They may be used only as separate tokens; they will not be
     interpolated into strings. If there is no current package (due to an empty
     "package;" directive), __PACKAGE__ is the undefined value.

     The two control characters ^D and ^Z, and the tokens __END__ and __DATA__
     may be used to indicate the logical end of the script before the actual end
     of file. Any following text is ignored.

     Text after __DATA__ may be read via the filehandle "PACKNAME::DATA", where
     "PACKNAME" is the package that was current when the __DATA__ token was
     encountered. The filehandle is left open pointing to the contents after
     __DATA__. It is the program's responsibility to "close DATA" when it is 
done
     reading from it. For compatibility with older scripts written before
     __DATA__ was introduced, __END__ behaves like __DATA__ in the top level
     script (but not in files loaded with "require" or "do") and leaves the
     remaining contents of the file accessible via "main::DATA".

     See SelfLoader for more description of __DATA__, and an example of its use.
     Note that you cannot read from the DATA filehandle in a BEGIN block: the
     BEGIN block is executed as soon as it is seen (during compilation), at 
which
     point the corresponding __DATA__ (or __END__) token has not yet been seen.

perlpod man page:

   Embedding Pods in Perl Modules
     You can embed Pod documentation in your Perl modules and scripts. Start 
your
     documentation with an empty line, a "=head1" command at the beginning, and
     end it with a "=cut" command and an empty line. Perl will ignore the Pod
     text. See any of the supplied library modules for examples. If you're going
     to put your Pod at the end of the file, and you're using an __END__ or
     __DATA__ cut mark, make sure to put an empty line there before the first 
Pod
     command.

       __END__

       =head1 NAME

perl561delta man page:

     Scripts are read in binary mode by default to allow ByteLoader (and the
     filter mechanism in general) to work properly. For compatibility, the DATA
     filehandle will be set to text mode if a carriage return is detected at the
     end of the line containing the __END__ or __DATA__ token; if not, the DATA
     filehandle will be left open in binary mode. Earlier versions always opened
     the DATA filehandle in text mode.
...

   Potential to leak DATA filehandles
     Using the "__DATA__" token creates an implicit filehandle to the file that
     contains the token. It is the program's responsibility to close it when it
     is done reading from it.

     This caveat is now better explained in the documentation. See perldata.
_______________________________________________
ActivePerl mailing list
ActivePerl@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to