_DATA_和\*DATA这都是啥用法啊,不理解

_DATA_和\*DATA这都是啥用法啊,不理解

#!/usr/bin/env perl

use strict;
use warnings;
use XML::Simple;
use Data:umper;

my $ref = XMLin(\*DATA);
print Dumper $ref;

__DATA__
<function name="showImage">
    <data>A random picture</data>
    <argument><![CDATA[<img src="test.jpg">]]></argument>
    <argument>0</argument>
</function>
\*DATA 我所知道的...
*DATA是global HASH中的variable ..可以当他是$DATA,@DATA,%DATA 只要叫DATA都可以用....
\*DATA就是把Global HASH中的DATA的address给 XMLin去..
後面那个
__DATA__
我没用过..但是应该是把下面那一串XML指向DATA这个Address吧....


QUOTE:
原帖由 flw 于 2007-9-12 08:54 发表
看精华区。或者继续死等。

perldoc perldata
perldoc selfloader
\*DATA是利用一个glob引用, 通常用这种方法来把一个文件句柄当成参数传递到函数中.

__DATA__是说这行之后的内容当成一个文件, 这个文件的句柄就叫DATA. 也就是你可以用读文件的方式读取__DATA__之后的内容.
_DATA_是一种文字记号,看这里:http://www.unix.org.ua/orelly/perl/cookbook/ch07_07.htm
简单翻译如下:
如果你想将一些数据放入你的程序,并像处理它存储在其他文件里的情况一样处理它,你可以用_DATA_或_END_标记来实现。 在你的程序代码之后用_DATA_ 或_END_来标识数据块的开始,这样虽然数据写在你的程序或者模块中,但也会被读入DATA的文件句柄了。
例子:
Use __DATA__ within a module:

while (<DATA> {
    # process the line
}
__DATA__
# your data goes here
Similarly, use __END__ within the main program file:

while (<main:ATA> {
    # process the line
}
__END__
# your data goes here

讨论.....(略)