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
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs